Мы знаем, что кортежи Python неизменны, хороши. Когда я пытаюсь изменить ссылку на компонент кортежа, я получаю исключение, как и ожидалось. Что не ожидается, компонент изменяется независимо от исключения, тогда как я думал, что неизменяемость гарантирует, что объект не будет изменяться.Назначение изменчивого компонента кортежа в python: ошибка? особенность?
Это ошибка, функция или PEP?
In [6]: x=([1],)
In [7]: type(x)
Out[7]: tuple
In [8]: x[0]+=[2,3]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-a73186f99454> in <module>()
----> 1 x[0]+=[2,3]
TypeError: 'tuple' object does not support item assignment
In [9]: x
Out[9]: ([1, 2, 3],)
Вы не первые! – jamylak
Также обратите внимание, что для того, чтобы кортеж был хешируемым, все его компоненты должны быть хешируемыми. 'hash ((1,2,3))' отлично работает. 'hash (([], [], []))' вызовет исключение. – mgilson