版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深浅拷贝的区别与实现教学目标1.掌握浅拷贝的实现方式
2.了解浅拷贝的局限性
3.了解什么是深拷贝
4.了解深浅拷贝的区别
浅拷贝(ShallowCopy)是Python中复制对象的一种方式,它创建新对象,但内部嵌套的可变对象(如列表内列表)仍共享引用。核心概念:浅拷贝只复制顶层对象,子对象保持原引用。这意味着修改拷贝的嵌套对象会影响原对象。优势:高效,内存开销小。1、什么是浅拷贝?
#浅拷贝基本示例importcopy#导入copy模块,用于拷贝操作original=[1,2,[3,4]]#原列表,包含嵌套列表shallow=copy.copy(original)#浅拷贝,创建新列表,但嵌套共享shallow[2][0]=5#修改拷贝的嵌套元素print(original)#输出:[1,2,[5,4]],原对象受影响浅拷贝可以通过copy模块的copy()函数、列表的copy()方法或切片[:]实现。核心概念:切片创建新容器,但元素引用相同。copy.copy()通用所有支持拷贝的对象。2.浅拷贝的实现方式#多种浅拷贝方式lst=[10,20,30]#原列表shallow1=lst[:]#切片浅拷贝shallow2=lst.copy()#列表方法浅拷贝importcopy#导入copyshallow3=copy.copy(lst)#copy函数浅拷贝shallow1[0]=100#修改拷贝,不影响原lstprint(lst)#输出:[10,20,30]浅拷贝的局限在于嵌套可变对象共享,导致意外修改。核心概念:id()函数检查对象身份,嵌套id相同证明共享。适合扁平结构,避免深层修改。3.浅拷贝的局限性#浅拷贝局限示例importcopy#导入copyorig={'a':[1,2],'b':3}#原字典,嵌套列表shallow=copy.copy(orig)#浅拷贝print(id(orig['a'])==id(shallow['a']))#输出:True,嵌套共享shallow['a'][0]=100#修改嵌套,影响origprint(orig['a'])#输出:[100,2]深拷贝(DeepCopy)是Python中完全复制对象及其所有嵌套对象的方式,创建独立副本。核心概念:递归复制所有层级,适用于复杂结构如嵌套字典。优势:安全独立,但内存和时间开销大。4.什么是深拷贝?#深拷贝基本示例importcopy#导入copyoriginal=[1,2,[3,4]]#原列表,嵌套deep=copy.deepcopy(original)#深拷贝,递归复制deep[2][0]=5#修改嵌套,不影响原print(original)#输出:[1,2,[3,4]],原不变深浅拷贝区别在于复制深度:浅拷贝只复制顶层,深拷贝复制所有层。核心概念:在Python中,浅拷贝高效但风险共享修改;深拷贝安全但资源消耗。使用id()比较嵌套对象身份。5.深浅拷贝的区别#区别比较importcopy#导入copyorig=[[1,2],3]#原列表shallow=copy.copy(orig)#浅拷贝deep=copy.deepcopy(orig)#深拷贝print(id(orig[0])==id(shallow[0]))#输出:Trueprint(id(orig[0])==id(deep[0]))#输出:False自定义类可通过__copy__()和__deepcopy__()实现浅深拷贝。核心概念:deepcopy()需递归调用deepcopy()处理成员。用于复杂对象如带有文件柄的类。6.自定义类的拷贝实现importcopy#导入copyclassMyClass:#自定义类def__init__(self,data):self.data=data#初始化def__copy__(self):#浅拷贝方法returnMyClass(self.data)#新实例,共享datadef__deepcopy__(self,memo):#深拷贝方法returnMyClass(copy.deepcopy(self.data,memo))#递归深拷贝obj=MyClass([1,[2]])#实例deep=copy.deepcopy(obj)#调用__deepcopy__拷贝包含弱引用的对象时,默认的深拷贝可能无法正确处理弱引用指向的目标。直接拷贝后,新对象中的弱引用仍指向原对象,若原对象被回收,弱引用失效;或我们希望它指向新副本,而非原对象。核心概念在类的__deepcopy__方法中,根据memo字典获取目标对象的新副本,并重新创建指向新副本的弱引用类。7.weakref在拷贝中的应用importweakrefimportcopyclassData:passclassContainer:def__init__(self,data):self.ref=weakref.ref(data)#弱引用指向datadef__deepcopy__(self,memo):#获取data的新副本(若已拷贝过则从memo取)new_data=copy.deepcopy(self.ref(),memo)new_obj=Container(new_data)#新容器指向新数据returnnew_objd=Data()c=Container(d)c2=copy.deepcopy(c)print(c2.ref()isd)#False,指向新副本print(c2.ref()isnotNone)#True小结1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数据分析团队数据清洗与处理流程指导书
- 校园广播站开播校园之声大揭秘
- 田园暑假野趣一夏
- 春节小达人了解春节习俗的小知识
- 采购服务合同条款商洽函5篇范本
- 防灾减灾教育:提高安全意识小学主题班会课件
- 树立正确观念筑牢安全防线小学主题班会课件
- 公共安全紧急演练流程指南
- 筑牢诚信基础共话美好明天小学主题班会课件
- 体育精神:向着终点冲刺的决心小学主题班会课件
- 南昌县图书馆2026年编外人员招聘考试参考题库及答案详解
- 广东省东莞五校2025-2026学年九年级上学期12月期中英语试题(含答案)
- 2026江苏省医疗器械检验所招聘5人笔试参考试题及答案详解
- 房屋建筑工程施工现场人工智能安全监管技术标准(TCECS1598-2024 )
- 小儿新生儿肺炎诊疗指南(2025年版)
- 2026年医师定期考核口腔试题题库(及答案)
- 中医不寐诊疗指南2025版
- 北京水务投资集团有限公司集团系统公开招聘笔试考题
- 医院反恐怖安全工作制度
- 2026年救助管理机构工作规范竞赛题库
- 2025中国邮政储蓄银行总行纪委办公室社会招聘2人笔试历年典型考题及考点剖析附带答案详解2套
评论
0/150
提交评论