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