我刚看到一些非常奇怪的东西。
>>> 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
?
答案 0 :(得分:20)
当我开始在评论中提及时,+=
实际上修改了列表就地,然后尝试将结果分配给元组中的第一个位置。来自data model documentation:
调用这些方法来实现增强算术赋值(+ =, - =, =,/ =,// =,%=,* =,&lt;&lt; =,&gt; &gt; =,&amp; =,^ =,| =)。这些方法应该尝试就地执行操作(修改self)并返回结果(可能是,但不一定是自己)。
+=
因此等同于:
t[0].extend(['world']);
t[0] = t[0];
因此,就地修改列表不是问题(1.步骤),因为列表是可变的,但是将结果返回给元组是无效的(2.步骤),而这就是抛出错误的地方。 / p>
答案 1 :(得分:8)