Копирование списков: подводные камни
Одна из классических ловушек новичка: думаешь, что скопировал список, а меняются оба. Разберёмся почему.
Присваивание не копирует
Строка 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().
Начать игру бесплатно