Python defaultdict参考[重复]

问题描述 投票:-1回答:3

这个问题在这里已有答案:

实际上,我不知道如何以正确的标题解释这个问题。任何版本都欢迎。

我们来看看这个例子吧。

# 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]

python python-2.7 defaultdict
3个回答
3
投票

因为res是2个元素的列表,每个元素都是相同的对象:d


1
投票

而不是使用简单地复制对*的引用的转发器运算符d,您可以使用列表推导与d的副本作为每次迭代的输出:

res = [d.copy() for _ in range(2)]

但是:Kua zxsw指出


0
投票

因为它们指向同一个对象。你可以通过运行看到这一点

https://ideone.com/0gnmkV

如果你不希望它们彼此模仿,你可以复制一本字典。

© www.soinside.com 2019 - 2024. All rights reserved.