为什么更新 Python 字典的浅表副本不会影响原始字典?

Linda Hamilton
发布: 2024-11-23 22:43:12
原创
729 人浏览过

Why Doesn't Updating a Shallow Copy of a Python Dictionary Affect the Original?

了解 Python 字典中的浅复制:为什么副本中的更新不会影响原始内容

使用 Python 字典时,重要的是了解浅复制和深复制之间的区别。浅复制创建一个新字典,其中包含对与原始字典相同的对象的引用,而深复制则创建一个包含对象副本的新字典。

使用 dict.copy() 进行浅复制

dict.copy() 方法执行字典的浅表复制。这意味着新字典将包含对存储在原始字典中的相同对象的引用。因此,对副本所做的任何更改也将反映在原始词典中。

示例:

original = {'a': 1, 'b': 2}
new = original.copy()
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}
登录后复制

在此示例中,dict.copy () 方法创建一个新字典 new,其中包含对与原始字典相同的对象的引用。当我们使用 {'c': 3} 更新副本时,原始文件和副本都会反映此更改。

为什么副本中的更新不会影响原始文件

浅副本中的更新不影响原始副本的原因是副本仅包含对对象的引用。当我们更新副本时,我们不会更改实际对象,而只会更改引用。

这与列表相反,其中浅表副本包含对列表本身的引用,而不是其中的元素。当我们更新列表的副本时,我们正在更新列表中的元素,这会影响副本和原始元素。

使用 copy.deepcopy() 进行深度复制

要创建与原始字典完全隔离的字典副本,我们可以使用 copy.deepcopy() 函数。此函数递归复制字典中的所有对象,创建具有不同引用的新结构。

示例:

import copy

original = {'a': 1, 'b': 2}
new = copy.deepcopy(original)
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}
登录后复制

在此示例中,copy.deepcopy( ) 函数创建一个新字典 new,其中包含原始字典中对象的副本。当我们更新副本时,原始词典不受影响。

以上是为什么更新 Python 字典的浅表副本不会影响原始字典?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板