这个问题在这里已有答案:
实际上,我不知道如何以正确的标题解释这个问题。任何版本都欢迎。
我们来看看这个例子吧。
# python 2.7.x
import collections
d = collections.defaultdict(int)
d['a'] = 2
d['b'] = 1
res = [d]* 2
res[0]['a'] -= 1
print res[1]
# => defaultdict(<type 'int'>, {'a': 1, 'b': 1})
我想知道为什么它会影响res[1]
?
因为res
是2个元素的列表,每个元素都是相同的对象:d
。
而不是使用简单地复制对*
的引用的转发器运算符d
,您可以使用列表推导与d
的副本作为每次迭代的输出:
res = [d.copy() for _ in range(2)]
但是:Kua zxsw指出