将值插入字典而不创建引用

时间:2011-01-03 20:52:10

标签: python dictionary

有没有办法将字典插入另一个字典而不仅仅是创建对dictionary.e.g的引用。

dict_a = {}
dict_b = {}
dict_a.insert(key, value)

这可以防止

带来的问题
dict_a["somekey"] = dict_b

5 个答案:

答案 0 :(得分:4)

您可以在b:

上使用copy.deepcopy
>>> a = {'a':[1,2,3]}
>>> b = {'b':[4,5,6]}
>>> a['c'] = copy.deepcopy(b)
>>> a
{'a': [1, 2, 3], 'c': {'b': [4, 5, 6]}}
>>> b
{'b': [4, 5, 6]}
>>> b['b'].append(7)
>>> b
{'b': [4, 5, 6, 7]}
>>> a
{'a': [1, 2, 3], 'c': {'b': [4, 5, 6]}}

如上所述使用更新或复制将执行浅拷贝。

答案 1 :(得分:2)

 dict_a.update(dict_b)

这会将dict_b中的所有键/值插入dict_a(注意:这是就地并返回None

答案 2 :(得分:1)

你需要复制一份:

dict_a["dsomekey"] = dict_b.copy()

修改没有字典方法可以按值插入值。 Python词典总是使用引用。

答案 3 :(得分:1)

我想你可能意味着更新?

>>> dict_a = {1: 'a'}
>>> dict_b = {2: 'b'}
>>> dict_a.update(dict_b)
>>> dict_a
{1: 'a', 2: 'b'}

或者你是说你想要一份副本?

>>> from copy import copy
>>> dict_a = {1: 'a'}
>>> dict_b = {2: 'b'}
>>> dict_a['dict'] = copy(dict_b)
>>> dict_a
{1: 'a', 'dict': {2: 'b'}}

答案 4 :(得分:1)

编辑:this答案更好。您应该使用copy.deepcopy,否则您将获得对复制字典中要复制的字典中存储的对象的引用。

以下原始答案:

您需要显式创建第二个字典的副本,并将其设置为原始字典中的值。

dict_a["somekey"] = dict_b.copy()

当你copy一本字典时,它会完全发挥作用,它会创建原始字典的全新副本。