我正在尝试创建一个包含现有字典的新变量,以便我可以更改这个新字典中的内容,而不会影响旧字典。当我在下面尝试这个,我认为这是显而易见的方法,它仍然似乎编辑我的原始字典当我编辑新的..我一直在寻找这方面的信息但似乎无法找到任何东西,任何信息表示赞赏
newdictionary = olddictionary
答案 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)。
改为使用.copy()
(注意:这会创建一个浅表副本):
newdictionary = olddictionary.copy()
要创建深层副本,您可以使用复制模块中的.deepcopy()
newdictionary = copy.deepcopy(olddictionary)
答案 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)