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

Копирование списков: подводные камни

Одна из классических ловушек новичка: думаешь, что скопировал список, а меняются оба. Разберёмся почему.

Присваивание не копирует

Строка b = a не создаёт новый список — она даёт второе имя тому же самому списку. Меняешь b — меняется и a, потому что это один и тот же объект в памяти.

a = [1, 2, 3]
b = a
b.append(4)
print(a)   # [1, 2, 3, 4] — изменился тоже!

Как копировать правильно

Чтобы получить независимую копию, используйте срез [:] или метод copy(). Тогда получится новый список, и изменения в нём не затронут исходный.

a = [1, 2, 3]
b = a[:]        # или a.copy()
b.append(4)
print(a)        # [1, 2, 3] — цел

Про вложенные списки

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

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

Почему изменились оба списка? b = a — это одно имя на тот же список, а не копия.

Как сделать копию? Через a[:] или a.copy().

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

Задание