Python,从字典创建新变量?看起来并不简单?

3 投票
6 回答
866 浏览
提问于 2025-04-16 03:02

我想创建一个新变量,这个变量是基于一个已有的字典,这样我就可以在新字典里做修改,而不会影响到旧的字典。当我尝试下面的方法时,我以为这是最简单的做法,但似乎在我修改新字典时,原来的字典也被改动了。我一直在找相关的信息,但找不到任何资料,任何帮助都很感谢。

newdictionary = olddictionary

6 个回答

3

在Python中,像这样的赋值操作只是让newdictionary这个名字指向和olddictionary一样的东西,正如你所注意到的。你可以使用dict()这个构造函数来创建一个新的字典:

newdictionary = dict(olddictionary)

需要注意的是,这样做只是创建了一个浅拷贝。如果你想要深拷贝,可以查看copy这个标准库模块。

6

你现在只是让 newdictionary 指向和 olddictionary 一样的地方,也就是说它们指向的是同一个内容。你可以看看 这个页面(虽然是关于列表的,但对字典也是适用的)。

alt text


建议使用 .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() 会创建一个浅拷贝,这样字典里的列表仍然是相互引用的(也就是说,虽然修改其他项目不会有问题,但如果你修改一个字典里的列表,另一个字典里的列表也会跟着改变)。

撰写回答