Копирование списка срезом и последующее изменение

Оба print выведут [1, 2, 3, 4], но это два разных списка. Срез lst[:] создаёт поверхностную копию, а append и += независимо изменяют каждый из контейнеров.

Короткий ответ

Что ответить на собеседовании

Оба print выведут [1, 2, 3, 4], но это два разных списка. Срез lst[:] создаёт поверхностную копию, а append и += независимо изменяют каждый из контейнеров.

Подробный разбор

Ответ с пояснениями

Условие

Разберитесь, как ведут себя списки при создании их копии с помощью среза и дальнейших модификаций. Какой вывод будет получен?

lst = [1, 2, 3]
copy_lst = lst[:]

lst.append(4)
copy_lst += [4]

print(lst)
print(copy_lst)

Ответ

Оба print выведут [1, 2, 3, 4], но это два разных списка. Срез lst[:] создаёт поверхностную копию, а append и += независимо изменяют каждый из контейнеров.

После копирования совпадает содержимое, а не идентичность:

[1, 2, 3, 4]
[1, 2, 3, 4]

lst.append(4) добавляет элемент в оригинал. copy_lst += [4] расширяет копию на месте. Проверка lst is copy_lst даст False. Вложенные объекты при таком копировании остаются общими: если бы элементом был список, изменение его содержимого было бы видно через обе внешние коллекции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее