mutable type inside an immutable container

Я немного запутался в изменении членов кортежа. Следующее не работает:

>>> thing = (['a'],)
>>> thing[0] = ['b']
TypeError: 'tuple' object does not support item assignment
>>> thing
(['a'],)

Но это работает:

>>> thing[0][0] = 'b'
>>> thing
(['b'],)

Также работает:

>>> thing[0].append('c')
>>> thing
(['b', 'c'],)

Не работает, и работает (а?!):

>>> thing[0] += 'd'
TypeError: 'tuple' object does not support item assignment
>>> thing
(['b', 'c', 'd'],)

Вроде бы эквивалентно предыдущему, но работает:

>>> e = thing[0]
>>> e += 'e'
>>> thing
(['b', 'c', 'd', 'e'],)

Так каковы же правила игры, когда можно и нельзя модифицировать что-то внутри кортежа? Кажется, что это больше похоже на запрет использования оператора присваивания для членов кортежа, но последние два случая ставят меня в тупик.

10
задан wim 7 April 2015 в 01:36
поделиться