Назад к вопросам
Junior
88
questionbank

Как в Python передаются переменные: по ссылке или по значению?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В Python переменные передаются по ссылке на объект. При этом значение переменной по сути является ссылкой на объект в памяти.

Когда мы присваиваем одну переменную другой, мы создаем новую ссылку на тот же объект. Изменение изменяемого объекта через одну ссылку будет видно через другую.

Пример с изменяемым объектом (список):

# Создаем список
list1 = [1, 2, 3]
# Присваиваем list2 ссылку на тот же список
list2 = list1
# Изменяем список через list1
list1.append(4)
# Изменения видны через list2
# list2 теперь [1, 2, 3, 4]
print(list2)

Если мы переприсвоим переменную, то она начнет ссылаться на новый объект.

Пример с переприсваиванием:

# Переприсваиваем list1 новый список
list1 = [5, 6]
# list2 по-прежнему ссылается на старый список
# list2 остается [1, 2, 3, 4]
print(list2)

Для неизменяемых объектов (строки, числа, кортежи) изменение значения переменной всегда приводит к созданию нового объекта и переприсваиванию ссылки. Это создает впечатление передачи по значению, хотя на самом деле это все еще передача ссылки на новый объект.

Пример с неизменяемым объектом (число):

# Создаем число
num1 = 10
# Присваиваем num2 ссылку на то же число
num2 = num1
# "Изменяем" num1 (на самом деле создается новый объект 20 и num1 ссылается на него)
num1 = 20
# num2 по-прежнему ссылается на старый объект 10
# num2 остается 10
print(num2)

Таким образом, Python использует модель "передачи ссылки на объект", которая при работе с изменяемыми объектами ведет себя как передача по ссылке, а при работе с неизменяемыми объектами - как передача по значению (из-за создания новых объектов при "изменении").