Присваивание связывает имя с объектом
Создайте список командой a = [2, 4], затем выполните b = a. Теперь два имени относятся к одному списку. Если добавить элемент через b.append(6), просмотр a также покажет изменение. Это не ошибка интерпретатора и не автоматическое копирование между двумя отдельными контейнерами. Изменился общий объект. Такой пример помогает увидеть разницу между именем в программе и данными, к которым оно обращается. Само появление нового имени ещё не создаёт новый список.
Изменение и новое присваивание различаются
После предыдущего опыта выполните b = [9]. Теперь имя b связано с другим списком, а a продолжает относиться к прежнему. Операция не очищает старый объект только потому, что изменилось одно из имён. Сравните это с добавлением элемента: в одном случае меняется содержимое существующего списка, в другом связь имени с объектом. Полезно рисовать небольшую схему со стрелками. Она часто объясняет результат яснее, чем попытка запомнить каждый пример как отдельное исключение.
Копирование тоже имеет границы
Вызов a.copy() создаёт новый список с теми же элементами. Для простого списка чисел это позволяет отдельно добавлять или удалять элементы на верхнем уровне. Но такая копия является поверхностной: если внутри находятся изменяемые объекты, ссылки на них остаются общими. Не нужно сразу заучивать все способы глубокого копирования. Сначала уточните задачу и структуру данных. Само слово копия не гарантирует независимости каждого вложенного элемента, поэтому предположение важно проверять на подходящем примере.
Интерактивный опыт должен быть воспроизводимым
В работающей сессии сохраняются ранее созданные имена и изменения. Поэтому случайный результат может зависеть от команды, выполненной несколько минут назад. Перед новым опытом задавайте исходные значения явно или начинайте чистую сессию. Записывайте последовательность действий и ожидаемый результат. Сообщение об ошибке тоже является полезным наблюдением: прочитайте его тип и место возникновения, вместо случайной замены нескольких частей одновременно. Для учебной проверки используйте небольшие вымышленные данные, а не важные файлы или внешние действия.
Попробуйте на практике
Проверьте различие между двумя именами и двумя списками в доступном интерпретаторе Python.
- Выполните a = [2, 4] и b = a, затем заранее запишите, что ожидаете увидеть после b.append(6).
- Посмотрите значения a и b и нарисуйте схему их связи с одним объектом.
- Выполните b = a.copy(), добавьте элемент только через b и сравните результат на верхнем уровне.
- Начните опыт заново с явно заданными значениями и объясните разницу между присваиванием, изменением и копированием.
Как проверить результат. Вы можете предсказать результат простого примера и объяснить, общий ли объект используется. Повтор опыта даёт тот же результат из одинакового состояния.
Частые вопросы
Команда b = a всегда создаёт копию?
Нет. Она связывает имя b с тем же объектом, к которому относится a. Поведение дальнейших действий зависит от типа объекта и операции.
Почему пример из документации ведёт себя иначе в моей сессии?
Проверьте предыдущие присваивания и изменения. Начните с одинакового исходного состояния и повторите точную последовательность действий.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.