Дрон Кодер — программирование для детей и взрослых в игровой форме. Начать бесплатно

Копия или ссылка: важное про переменные

«Я поменял один список, а изменился и второй» — классическая загадка. Дело в ссылках.

Переменная — это ярлык

В Python переменная не «коробка со значением», а ярлык (ссылка) на объект в памяти. Когда вы пишете b = a для списка, вы не копируете список — вы вешаете второй ярлык на тот же самый объект.

Почему меняются оба

Раз a и b указывают на один список, изменение через b видно и через a — это один и тот же объект. Для изменяемых типов (списки, словари, множества) это частый источник неожиданных багов.

Как сделать настоящую копию

Чтобы получить независимую копию списка, используйте срез a[:], метод a.copy() или list(a). Для вложенных структур нужна «глубокая» копия — copy.deepcopy, иначе внутренние списки останутся общими.

А что с числами и строками

Числа, строки и кортежи неизменяемы: их нельзя поменять «на месте», поэтому проблема с общей ссылкой для них не возникает. Понимание изменяемости приходит с практикой — тренируйтесь на маленьких примерах.

Частые вопросы

Как проверить, один ли это объект? Оператором is или функцией id().

Когда нужна глубокая копия? Когда в списке лежат другие списки или словари, и их тоже нужно скопировать независимо.

Начать игру бесплатно
Попробуй прямо здесь
Уровень 1

Задание

Все обучающие игры «Дрон Кодер»

Одна вселенная — много модулей. Программирование, математика и логика в одной игре: пиши код, считай, решай задачи — а дрон-фермер летит по полю и собирает урожай. В каждом модуле первый уровень бесплатный, без регистрации.

📈 Математика · алгебра и графики
📖 Русский язык