Python,从字典创建一个新变量?不像看起来那么简单吗?

时间:2010-08-19 19:24:31

标签: python dictionary

我正在尝试创建一个包含现有字典的新变量,以便我可以更改这个新字典中的内容,而不会影响旧字典。当我在下面尝试这个,我认为这是显而易见的方法,它仍然似乎编辑我的原始字典当我编辑新的..我一直在寻找这方面的信息但似乎无法找到任何东西,任何信息表示赞赏

newdictionary = olddictionary

6 个答案:

答案 0 :(得分:7)

您正在创建引用,而不是副本。为了制作完整的副本并保持原始状态不变,您需要copy.deepcopy()。所以:

from copy import deepcopy
dictionary_new = deepcopy(dictionary_old)

只需使用a = dict(b)a = b.copy()即可生成浅色副本,并将字典中的任何列表作为彼此的引用(以便尽管编辑其他项目不会导致问题,但请在一个字典也会引起另一个字典的变化。)

答案 1 :(得分:6)

您只是将newdictionary指向相同的参考olddictionary点。 请参阅this page(它是关于列表的,但它也适用于dicts)。

alt text


改为使用.copy()(注意:这会创建一个浅表副本):

newdictionary = olddictionary.copy()

要创建深层副本,您可以使用复制模块中的.deepcopy()

newdictionary = copy.deepcopy(olddictionary)

Wikepedia:

Shallow vs Deep Copy

答案 2 :(得分:3)

像Python中那样的赋值只会使newdictionary名称与olddictionary引用相同的内容,正如您所注意到的那样。您可以使用dict()构造函数创建 new 字典:

newdictionary = dict(olddictionary)

请注意,这会产生副本。有关深层副本,请参阅copy标准库模块。

答案 3 :(得分:1)

newdictionary = dict(olddictionary.items())

这会创建一个新副本(更具体地说,它将olddict的内容作为(key,value)对提供给dict,它从(key,value)对构造一个新的字典。)

编辑:哦,是的,复制 - 完全忘记了,这是正确的方法。

a = b

只复制引用,但不复制对象。

答案 4 :(得分:0)

您只是在创建对同一字典的另一个引用。

您需要制作副本:使用以下其中一项(在检查文档后,每项操作):

new = dict(old)

new = old.copy()

import copy
new = copy.copy(old)

import copy
new = copy.deepcopy(old)

答案 5 :(得分:0)

我认为你需要一份深刻的副本来满足你的要求。请参阅here

像dict.copy()这样的looks执行浅拷贝,这是Rick 想要的。

from copy import deepcopy
d = {}
d['names'] = ['Alfred', 'Bertrand']
c = d.copy()
dc = deepcopy(d)