我在SO上发现了一些询问TypeError: 'tuple' object does not support item assignment
的问题,但我仍然对此感到困惑:
考虑代码段:
>>> a = ([],[])
>>> a[0].append(1) # 1
>>> a
([1], [])
>>> a[0] += [2]
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
a[0] += [2]
TypeError: 'tuple' object does not support item assignment # 2
>>> a
([1, 2], []) # 3
>>>
我的问题是:
1
成功地改变了它的价值。为什么?(我知道我真的不懂python不变性......)1
被接受,2
加注TypeError
的原因是什么?3
,a
被修改,那么提出TypeError
的重点是什么?谢谢
答案 0 :(得分:0)
这是因为元组是不可变的,但它可以包含可变数据类型(在你的情况下是 list )作为元素。
你的元组a = ([], [])
是一个列表元组。这就是为什么你能够将数据附加到[0] - 这是一个列表。
在此:
a[0] += 2
您试图更改引发异常TypeError的元组值(由于使用了'='赋值运算符)
三,由于使用'+'运算符,列表被连接起来。