首页 > 后端开发 > Python教程 > Python 赋值是否会创建对象的副本或引用?

Python 赋值是否会创建对象的副本或引用?

Susan Sarandon
发布: 2024-12-19 12:25:14
原创
208 人浏览过

Does Python Assignment Create Copies or References to Objects?

Python 会分配引用还是副本吗?

问题:

在处理诸如此类的对象时,Python 的赋值行为可能会令人困惑字典。考虑以下代码:

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'

print(dict_a)
print(dict_b)
print(dict_c)
登录后复制

预期输出:

{}
{}
{'hello': 'goodbye'}
登录后复制

实际输出:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
登录后复制

解释:

Python 变量指的是内存中的对象。当您分配 dict_a = dict_b 时,您并不是复制字典对象本身,而是分配对与 dict_b 相同的内存地址的引用。这意味着对一个字典所做的更改将影响所有三个变量,因为它们指向同一个底层对象。

解决方案:

创建一个真实的副本Python 中的对象,需要使用 copy 或 copy.deepcopy 函数。以下代码将创建原始字典的独立副本:

dict_a = dict_b.copy()  # Shallow copy
dict_a = copy.deepcopy(dict_b)  # Deep copy
登录后复制
  • 浅复制:创建引用与原始字典相同的嵌套对象的新字典。
  • 深度复制: 创建一个新字典并递归复制所有嵌套对象。

通过使用这些函数,您可以确保对一个字典所做的更改不会影响其他字典。

以上是Python 赋值是否会创建对象的副本或引用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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