Python3中直接赋值、浅拷贝、深度拷贝区别分析

本文介绍了Python3中直接赋值、浅拷贝和深拷贝的区别。直接赋值是对象引用,浅拷贝只拷贝父对象,不拷贝子对象,而深拷贝则完全拷贝父对象及其子对象。通过实例展示了这三种方式的不同行为,特别是在子对象被修改时的效果。详细内容可参考相关文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 直接赋值:实际就是对象的引用

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象

copy 模块的 赋值、copy.copy( 浅拷贝 )和 copy.deepcopy(深拷贝) 分析:

1、b = a:赋值引用,b和a都指向相同的对象;a变量发生改变,则b变量跟着改变

2、b = a.copy():浅拷贝,a和b是两个独立的对象,但他们的子对象还是指向一个相同的对象;假如a中的子对象L发生变化,则b中的子对象M也会发生变化

3、b = a.deepcopy():深度拷贝,b完全拷贝了a的父对象和其子对象,a和b是两个完全独立的对象,a的改变不会引起b的变化

例:

# 字典赋值、浅拷贝、深拷贝的区别分析

import copy

dict_A = {
          'name':'Kobe',
          'Honor':['Champion' , 'MVP' , 'AllStar']
          }
# 赋值
dict_B = dict_A
# 浅拷贝
dict_C = copy.copy(dict_A)
# 深拷贝
dict_D = copy.deepcopy(dict_A)
# 增加dict_A中的值(非子对象)
dict_A['number'] = 24
# 增加ict_A中子对象的值
dict_A['Honor'].append('DPOY')

print("dict_A字典为:" , dict_A)
# 赋值操作,dict_B和dict_A完全一致
print("赋值dict_B字典为:" , dict_B)
# 浅拷贝,dict_C和dict_A子对象保持一致
print("浅拷贝dict_C字典为:" , dict_C)
# 深拷贝,dict_D和dict_A完全独立
print("深拷贝dict_D字典为:" , dict_D)

输出:

dict_A字典为: {'name': 'Kobe', 'Honor': ['Champion', 'MVP', 'AllStar', 'DPOY'], 'number': 24}
赋值dict_B字典为: {'name': 'Kobe', 'Honor': ['Champion', 'MVP', 'AllStar', 'DPOY'], 'number': 24}
浅拷贝dict_C字典为: {'name': 'Kobe', 'Honor': ['Champion', 'MVP', 'AllStar', 'DPOY']}
深拷贝dict_D字典为: {'name': 'Kobe', 'Honor': ['Champion', 'MVP', 'AllStar']}

 参考文档:

https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值