首页 > 后端开发 > Python教程 > Python 的对象分配如何工作以及如何创建独立副本?

Python 的对象分配如何工作以及如何创建独立副本?

Barbara Streisand
发布: 2024-12-07 01:11:15
原创
552 人浏览过

How Does Python's Object Assignment Work, and How Can I Create Independent Copies?

理解 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'}
登录后复制

在此例如,我们希望创建三个独立的词典。然而,结果显示 dict_a、dict_b 和 dict_c 都引用同一个字典对象。为 dict_c 分配键会修改共享字典,这会反映在所有三个变量中。

解决对象分配问题

为了实现创建独立副本的所需行为,Python 提供了几个选项:

  1. dict.copy() 方法: 该方法创建字典的浅表副本,将其所有键值对复制到一个新对象中。
dict_a = {1: 2}
dict_b = dict_a.copy()
dict_b[3] = 4

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

输出:

{1: 2}
{1: 2, 3: 4}
登录后复制
  1. copy.deepcopy() 函数: 该函数创建字典的深层副本,包括所有嵌套的
import copy

dict_a = {1: 2, 'nested': {3: 4}}
dict_b = copy.deepcopy(dict_a)
dict_b['nested'][5] = 6

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

输出:

{1: 2, 'nested': {3: 4}}
{1: 2, 'nested': {3: 4, 5: 6}}
登录后复制

通过使用这些方法,可以控制 Python 中的对象分配并防止对共享对象的意外修改。

以上是Python 的对象分配如何工作以及如何创建独立副本?的详细内容。更多信息请关注PHP中文网其他相关文章!

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