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

alias = source не копирует список: оба имени ссылаются на один изменяемый объект. Поэтому alias.append(5) меняет объект, который затем выводится и через source.

Короткий ответ

Что ответить на собеседовании

alias = source не копирует список: оба имени ссылаются на один изменяемый объект. Поэтому alias.append(5) меняет объект, который затем выводится и через source.

Подробный разбор

Ответ с пояснениями

Условие

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

source = [1, 2, 3, 4]
alias = source
alias.append(5)
print(source)

Опишите, как Python обрабатывает переменные, какие объекты создаются, почему source выводит [1, 2, 3, 4, 5], и чем отличается простое копирование от создания независимого списка.

Ответ

alias = source не копирует список: оба имени ссылаются на один изменяемый объект. Поэтому alias.append(5) меняет объект, который затем выводится и через source.

Будет напечатано [1, 2, 3, 4, 5]. Новый список при присваивании не создаётся:

print(alias is source)  # True

Для независимого внешнего контейнера используйте alias = source.copy() или source[:]. Это поверхностные копии: вложенные объекты остаются общими. Если нужно независимо изменять вложенные списки и словари, рассмотрите copy.deepcopy, учитывая особенности копируемых объектов. Перепривязка alias к другому списку не меняет source.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее