Почему изменения, внесенные в переменную new_list, приводят к изменениям в переменной languages, хотя изменения производились только в new_list?
Это происходит потому, что в 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
Если объект изменяемый, то изменения будут видны по любой ссылке, что логично:
Если объект неизменяемый, то это не так заметно, потому что ссылка заменяется на ссылку на новый объект:
Если нужна независимая копия списка, словаря или иного изменяемого объекта - делай её явно.