Влияет ли изменение вложенного списка на оригинальный список

Да, l станет ['TEST', 2]. Элемент t[0] ссылается на тот же список, поэтому вложенное присваивание меняет исходный объект.

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

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

Да, l станет ['TEST', 2]. Элемент t[0] ссылается на тот же список, поэтому вложенное присваивание меняет исходный объект.

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

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

Условие

Определите, изменится ли список l после выполнения следующего кода, в котором меняется элемент вложенного списка.

l = [1, 2]
a = [5, 6]
t = [l, a]
t[0][0] = "TEST"

Ответ

Да, l станет ['TEST', 2]. Элемент t[0] ссылается на тот же список, поэтому вложенное присваивание меняет исходный объект.

После t = [l, a] новые внутренние списки не создаются: внешний контейнер хранит ссылки на уже существующие l и a.

assert t[0] is l
# После присваивания:
# l == ['TEST', 2]
# a == [5, 6]
# t == [['TEST', 2], [5, 6]]

В отличие от t[0] = 'TEST', выражение t[0][0] = 'TEST' не заменяет ссылку во внешнем списке, а изменяет элемент внутреннего. Если нужна независимая копия первого списка, при построении используйте t = [l.copy(), a]; для глубокой вложенности поверхностной копии может быть недостаточно.

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

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

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

Подробнее