Python,从字典创建新变量?看起来并不简单?
我想创建一个新变量,这个变量是基于一个已有的字典,这样我就可以在新字典里做修改,而不会影响到旧的字典。当我尝试下面的方法时,我以为这是最简单的做法,但似乎在我修改新字典时,原来的字典也被改动了。我一直在找相关的信息,但找不到任何资料,任何帮助都很感谢。
newdictionary = olddictionary
6 个回答
3
在Python中,像这样的赋值操作只是让newdictionary
这个名字指向和olddictionary
一样的东西,正如你所注意到的。你可以使用dict()
这个构造函数来创建一个新的字典:
newdictionary = dict(olddictionary)
需要注意的是,这样做只是创建了一个浅拷贝。如果你想要深拷贝,可以查看copy
这个标准库模块。
6
你现在只是让 newdictionary
指向和 olddictionary
一样的地方,也就是说它们指向的是同一个内容。你可以看看 这个页面(虽然是关于列表的,但对字典也是适用的)。
建议使用 .copy()
方法(注意:这会创建一个浅拷贝):
newdictionary = olddictionary.copy()
如果你想创建一个深拷贝,可以使用 .deepcopy()
,这个方法在复制模块中。
newdictionary = copy.deepcopy(olddictionary)
维基百科:
7
你正在创建一个引用,而不是一个副本。为了制作一个完整的副本,并且不影响原来的内容,你需要使用 copy.deepcopy()
。所以:
from copy import deepcopy
dictionary_new = deepcopy(dictionary_old)
仅仅使用 a = dict(b)
或 a = b.copy()
会创建一个浅拷贝,这样字典里的列表仍然是相互引用的(也就是说,虽然修改其他项目不会有问题,但如果你修改一个字典里的列表,另一个字典里的列表也会跟着改变)。