Разбор по шагам
1️⃣Выражение t[1] += [3] под капотом разбивается на две операции: t[1].__iadd__([3]) и последующее присваивание t[1] = ...
2️⃣Первый шаг выполняется успешно — метод __iadd__ мутирует список на месте, и он становится [2, 3].
3️⃣Второй шаг (присваивание обратно по индексу) бросает TypeError, так как кортежи неизменяемы.
4️⃣Ошибка перехватывается блоком except, где выводится строка 'Error ' без перехода на новую строку.
5️⃣Выполнение продолжается, и print(t) выводит кортеж с уже изменённым списком: (1, [2, 3]).
Почему это важно
Пример наглядно показывает, почему хранение мутабельных объектов (списков) внутри иммутабельных (кортежей) — плохая архитектурная практика. Операции над ними могут вызывать ошибки, но при этом оставлять данные в изменённом (грязном) состоянии.
Post #4693
816
- ✍ 9