Как в 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 использует модель "передачи ссылки на объект", которая при работе с изменяемыми объектами ведет себя как передача по ссылке, а при работе с неизменяемыми объектами - как передача по значению (из-за создания новых объектов при "изменении").