a = [[1], [2]]
b = a[:]
b[0].append(3)
print(a)
[[1, 3], [2]].  b = a[:] создает поверхностную копию списка a.  Это значит, что b содержит новые ссылки на те же самые внутренние списки, что и a.  Изменение внутреннего списка по ссылке b[0], например добавление элемента, отразится и в a[0], так как это один и тот же объект в памяти.
Вопрос: Какой будет результат выполнения следующего Python кода?
a = [[1], [2]]
b = a[:]
b[0].append(3)
print(a)
  Объяснение:
a = [[1], [2]]: Создается список a, содержащий два вложенных списка: [1] и [2].b = a[:]: Создается поверхностная копия списка a и присваивается переменной b. Важно понимать, что поверхностная копия создает новый список b, но элементы этого списка (в данном случае, вложенные списки [1] и [2]) остаются теми же самыми объектами в памяти.  a и b ссылаются на разные списки, но содержат ссылки на одни и те же вложенные списки.b[0].append(3):  Изменяется первый вложенный список списка b (то есть список b[0], который является тем же самым объектом, что и a[0]).  Метод append(3) добавляет элемент 3 в этот список.print(a): Выводится содержимое списка a. Поскольку b[0] и a[0] указывают на один и тот же объект, изменение b[0] отразится и на a[0].Результат:
[[1, 3], [2]]
  Ключевой момент:  Поверхностное копирование списков создает новый список, но не создает копии вложенных объектов.  Если вам нужна полная копия (копия всех вложенных объектов), необходимо использовать copy.deepcopy() из модуля copy.