В Python есть ловушка, на которой легко ошибиться.
Смотрим код: t равен кортежу из трёх элементов: один, два и список три, четыре.
То есть внутри tuple лежит обычный список.
Дальше выполняется строка: к элементу t с индексом два прибавить список с числом пять.
Проще говоря, Python берёт третий элемент кортежа и добавляет к нему пять.
Третий элемент — это список три, четыре.
Для списка операция плюс равно меняет объект на месте. Поэтому список сразу становится: три, четыре, пять.
Но потом Python пытается записать результат обратно в t с индексом два, то есть обратно в третий элемент tuple.
А tuple неизменяемый. Его элементы нельзя перезаписывать по индексу.
Поэтому возникает TypeError.
И вот тут главный подвох: ошибка произошла, но список уже успел измениться.
Финальный результат: t равен кортежу: один, два, список три, четыре, пять.
Вывод: tuple не даёт менять свою структуру, но не делает вложенные объекты неизменяемыми.
Post #1489
2.27K
- 🔥 8
- ❤ 1