为什么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.步骤),这就是引发错误的地方。