我刚遇到一个很奇怪的东西。
>>> 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而又改变list内部tuple?
TypeError
list
tuple
正如我在评论中开始提到的那样,+=实际上是 在原地 修改列表,然后尝试将结果分配给元组中的第一个位置。从数据模型文档中:
+=
调用这些方法以实现增强的算术分配(+ =,-=, =,/ =,// =,%=,* =,<< =,>> =,&=,^ =,| =)。这些方法应尝试就地进行操作(修改self)并返回结果(可以是,但不一定是self)。
+= 因此等于:
t[0].extend(['world']); t[0] = t[0];
因此,就地修改列表不是问题(1.步骤),因为列表是可变的,但是将结果分配回元组是无效的(2.步骤),这就是抛出错误的地方。