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

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

Susan Sarandon
Susan Sarandon原创
2024-12-19 12:25:14207浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn