Выбор ответа Senior Типы, изменяемость и сравнение обновлено
Загадка += над списком в кортеже
Вопрос
Что произойдёт при выполнении кода?
t = ([1],)
t[0] += [2]
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: TypeError, но t[0] станет [1, 2]. t[0] += [2] раскладывается на два шага: t[0].iadd([2]) расширяет список на месте, а затем t[0] = результат пытается присвоить элемент кортежа и падает с TypeError.
Варианты ответа
TypeError, иtне изменитсяTypeError, ноt[0]станет[1, 2]правильный ответ- Ошибки нет,
t[0]станет[1, 2] - Ошибки нет,
tне изменится
Разбор
t[0] += [2] раскладывается на два шага: t[0].__iadd__([2]) расширяет список на месте, а затем t[0] = результат пытается присвоить элемент кортежа и падает с TypeError. Первый шаг уже выполнен, поэтому список изменился, хотя пользователь увидел ошибку. Это известная особенность модели «расширенное присваивание = операция + присваивание».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.