我设置.当我编辑时,原始版本也会更改。为什么?dict2 = dict1
dict2
dict1
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1
>>> dict2["key2"] = "WHY?!"
>>> dict1
{'key2': 'WHY?!', 'key1': 'value1'}
网友回答:
虽然 和 生成副本,但它们只是浅层副本。如果您想要深拷贝,则需要。举个例子:dict.copy()
dict(dict1)
copy.deepcopy(dict1)
>>> source = {'a': 1, 'b': {'m': 4, 'n': 5, 'o': 6}, 'c': 3}
>>> copy1 = source.copy()
>>> copy2 = dict(source)
>>> import copy
>>> copy3 = copy.deepcopy(source)
>>> source['a'] = 10 # a change to first-level properties won't affect copies
>>> source
{'a': 10, 'c': 3, 'b': {'m': 4, 'o': 6, 'n': 5}}
>>> copy1
{'a': 1, 'c': 3, 'b': {'m': 4, 'o': 6, 'n': 5}}
>>> copy2
{'a': 1, 'c': 3, 'b': {'m': 4, 'o': 6, 'n': 5}}
>>> copy3
{'a': 1, 'c': 3, 'b': {'m': 4, 'o': 6, 'n': 5}}
>>> source['b']['m'] = 40 # a change to deep properties WILL affect shallow copies 'b.m' property
>>> source
{'a': 10, 'c': 3, 'b': {'m': 40, 'o': 6, 'n': 5}}
>>> copy1
{'a': 1, 'c': 3, 'b': {'m': 40, 'o': 6, 'n': 5}}
>>> copy2
{'a': 1, 'c': 3, 'b': {'m': 40, 'o': 6, 'n': 5}}
>>> copy3 # Deep copy's 'b.m' property is unaffected
{'a': 1, 'c': 3, 'b': {'m': 4, 'o': 6, 'n': 5}}
关于浅拷贝与深拷贝,来自 Python 模块文档:copy
浅拷贝和深层复制之间的区别仅与复合对象(包含其他对象,如列表或类实例)的对象)相关:
- 浅拷贝构造一个新的复合对象,然后(尽可能)在其中插入对原始对象中找到的对象的引用。
- 深层副本构造一个新的复合对象,然后递归地将原始对象中发现的对象的副本插入其中。
网友回答:
Python 从不隐式复制对象。当你设置 时,你使它们引用相同的精确 dict 对象,所以当你改变它时,所有对它的引用都会一直引用当前状态的对象。dict2 = dict1
如果你想复制字典(这种情况很少见),你必须明确地这样做
dict2 = dict(dict1)
或
dict2 = dict1.copy()
网友回答:
赋值时,您不是在复制 ,它会导致 的另一个名称。dict2 = dict1
dict1
dict2
dict1
要复制字典等可变类型,请使用模块的 /。copy
deepcopy
copy
import copy
dict2 = copy.deepcopy(dict1)
模板简介:该模板名称为【如何复制字典并仅编辑副本?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。