【发布时间】:2012-05-10 22:42:05
【问题描述】:
我刚刚遇到了一件很奇怪的事情。
>>> 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?
【问题讨论】:
-
我想你得看看
+=是如何实现的。似乎它实际上并没有创建一个新列表,它就地更改了列表,这就是+部分。然后你就有了分配,但是由于元组是不可变的,所以这是不允许的。 -
@FelixKling += 的作用类似于 append(),即列表的 id() 保持不变。
-
还要注意,为了能够散列一个元组,它的所有组成部分也必须是可散列的。
-
这是在the official FAQ,有一个很好的解释。还有一个 bug report 解释了为什么它不是错误。
标签: python