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)]
其实,我不知道如何用一个合适的标题来解释这个问题。欢迎任何版本。
我们只看例子。
# 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)]