Что произойдёт, если изменить список, находящийся внутри кортежа

Ошибки не будет: изменится вложенный список. my_list станет [1, 2, 3, 4, 5], а кортеж будет содержать ссылку на него с новым содержимым.

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

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

Ошибки не будет: изменится вложенный список. my_list станет [1, 2, 3, 4, 5], а кортеж будет содержать ссылку на него с новым содержимым.

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

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

Условие

Какой результат будет у следующего фрагмента кода, когда мы попытаемся изменить список, являющийся элементом кортежа?

my_list = [1, 2, 3]
my_tuple = (None, "blah", my_list)
my_tuple[-1].extend([4, 5])

Ответ

Ошибки не будет: изменится вложенный список. my_list станет [1, 2, 3, 4, 5], а кортеж будет содержать ссылку на него с новым содержимым.

my_list == [1, 2, 3, 4, 5]
my_tuple == (None, 'blah', [1, 2, 3, 4, 5])

Кортеж запрещает замену собственных элементов, но не изменение объектов, на которые они ссылаются. Метод extend вызывается у списка и не пытается присвоить новый элемент кортежа.

Это отличается от my_tuple[-1] += [4, 5]: расширенное присваивание после мутации попыталось бы записать результат обратно в tuple и вызвало TypeError. В приведённом коде нет print, поэтому сам по себе он ничего не выводит.

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

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

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

Подробнее