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
.