Python defaultdict 参考

Python defaultdict reference

其实,我不知道如何用一个合适的标题来解释这个问题。欢迎任何版本。

我们只看例子。

# 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

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

看到这个
print(id(res[0]))
print(id(res[1]))

如果你不想让他们互相模仿,你可以复印一本字典。

您可以使用列表推导式将 d 的副本作为输出,而不是使用简单地复制对 d 的引用迭代:

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

演示:https://ideone.com/0gnmkV