为什么Python元组中的列表的+ =会引发TypeError,但是修改列表呢?

我刚碰到一些很奇怪的东西。

>>> t = ([],) >>> t[0].append('hello') >>> t (['hello'],) >>> t[0] += ['world'] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> t (['hello', 'world'],) 

为什么它会引发TypeError ,然后改变tuple内的list

正如我在评论中开始提到的那样, +=实际上是在原地修改列表,然后尝试将结果分配给元组中的第一个位置。 从数据模型文档 :

调用这些方法来实现增广的算术赋值(+ =, – =, =,/ =,// =,%=,* =,<< =,>> =,&=,^ =,| =)。 这些方法应该尝试就地操作(修改自我)并返回结果(可能是,但不一定是自己)。

+=因此相当于:

 t[0].extend(['world']); t[0] = t[0]; 

所以就地修改列表并不是问题(1.步骤),因为列表是可变的,但是将结果返回给元组是无效的(2.步骤),这就是引发错误的地方。