Оба 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. Вложенные объекты при таком копировании остаются общими: если бы элементом был список, изменение его содержимого было бы видно через обе внешние коллекции.