sub станет [1, 2, [4]], а lst — [0, [1, 2, [4]], [3]]. Переменная sub ссылается на тот же вложенный список, что lst[1].
Влияние изменения вложенного списка через ссылку
sub станет [1, 2, [4]], а lst — [0, [1, 2, [4]], [3]]. Переменная sub ссылается на тот же вложенный список, что lst[1].
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, как изменение вложенного списка, полученного по ссылке, отразится на оригинальном списке, и какие результаты будут выведены.
lst = [0, [1, 2], [3]]
sub = lst[1]
sub.append([4])
print(sub)
print(lst)
Ответ
sub станет [1, 2, [4]], а lst — [0, [1, 2, [4]], [3]]. Переменная sub ссылается на тот же вложенный список, что lst[1].
print(sub) # [1, 2, [4]]
print(lst) # [0, [1, 2, [4]], [3]]
Операция sub = lst[1] не копирует список. Метод append([4]) добавляет один объект — список [4], поэтому появляется дополнительная вложенность. При sub.extend([4]) добавилось бы число 4 без вложенного списка.
Чтобы изменить отдельный контейнер, можно написать sub = lst[1].copy(). Однако такая копия поверхностная: если внутри уже находятся изменяемые объекты, они останутся общими. Для независимого копирования всей вложенной структуры нужен соответствующий глубокий способ.