d1 = {"dog":"woof", "cat":"meow"}
d2 = d1
d2["dog"] = "bark"
for i in d1:
print(i, d1[i])
dog bark
cat meow
这样做的最佳方法是什么:
dog woof
cat meow
答案 0 :(得分:6)
d1 = {"dog":"woof", "cat":"meow"}
d2 = d1.copy() # make a copy, not a reference to the same dictionary
d2["dog"] = "bark"
for i in d1:
print(i, d1[i])
# dog woof
# cat meow
答案 1 :(得分:2)
d1
和d2
指向内存中的同一个对象,因此更改d2
中的值也会影响d1
。
d1 = {}
d2 = d1
print id(d1) == id(d2)
# out: True
使用字典类或复制模块的复制方法。
d2 = d1.copy()
from copy import copy
d2 = copy(d1)
如果你有可变对象存储在字典中(即列表)并且想要复制theese,你应该使用deepcopy函数。
from copy import deepcopy
d2 = deepcopy(d1)
答案 2 :(得分:1)
Copy字典:
d2 = d1.copy() # instead of d2 = d1
答案 3 :(得分:0)
在您的情况下,d1
和d2
都指向同一个对象。您可以通过以下方式创建原始字典的副本:
d1.copy()
copy.copy(d1)
dict(d1)
copy.deepcopy(d1)
1,2,3将创建浅拷贝,4将创建深拷贝
答案 4 :(得分:0)
我想提出一个更好的方法来做到这一点。
from collections import ChainMap
d1 = {"dog":"woof", "cat":"meow"}
d2 = ChainMap({}, d1)
d2["dog"] = "bark"
for i in d1:
print(i, d1[i])
# dog woof
# cat meow
for i in d2:
print(i, d2[i])
# dog bark
# cat meow
请阅读ChainMap的参考:https://docs.python.org/3/library/collections.html#collections.ChainMap
如果你正在使用python2来实现ChainMap,请使用这个最小代码配方:https://code.activestate.com/recipes/305268/