Почему изменения во втором списке приводят к изменениям в первом после того, как я присвоил второму списку значение первого?

Почему изменения, внесенные в переменную new_list, приводят к изменениям в переменной languages, хотя изменения производились только в new_list?
  • 20 декабря 2023 г. 18:47
Ответы на вопрос 3
Это происходит потому, что в Python списки являются изменяемыми объектами. 

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

Аналогично, когда вы изменяете переменную `new_list`, это изменение также отражается на переменной `languages`, потому что они ссылаются на один и тот же список.
Чтобы правильно скопировать список: new_list = languages[:] 
А происходит так потому, что languages и new_list ссылаются на один и тот же адрес в памяти. Поэтому меняя один, меняется и другой.

https://pythonist.ru/chem-mutabelnye-obekty-otlich...
Читаем про изменяемые и неизменяемые объекты в питоне. 
Если коротко, когда ты делаешь a = b, ты не копируешь объект. Ты просто создаёшь новую ссылку на него.
Достаточно проверить так:
print(languages is new_list) # True
Если объект изменяемый, то изменения будут видны по любой ссылке, что логично:
Если объект неизменяемый, то это не так заметно, потому что ссылка заменяется на ссылку на новый объект:

Если нужна независимая копия списка, словаря или иного изменяемого объекта - делай её явно.
Похожие вопросы