- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Python引用、浅复制与深复制的解析
最近自学python,遇到了python一个对于初学者来说比较常见的问题,就是其中的引用、浅复制(shallowcopy)与深复制(deepcopy)的区别。之前搜索了一些网上的相关资料,发现都有些不太正确,有些尽然通过一些现象得出了“python中字符串无法修改因此只能重建”的结论,而其隐含的意思“数字整形变量可以修改,并不用重建”就错的更离谱了。因此,在此自己通过实验总结了一下规则,供大家参考。
首先,所有对于python中列表元素的修改,一定是基于以下两个大原则的,笔者这边先提出,接下来的实验中,会验证这两个原则:
①、修改元素必定会废除其原有的内存地址,并且为更新后的值建立新的内存地址
②、新元素的地址会更新到“上一级”的内存地址中(地址池中),并且也“只”更新到上“一”级的内存地址,(也就是说,上一级的内存地址是不变的。)
引用实例:
miku=[age,14]
ruka=miku (这种方式的复制,就是最常见的‘引用’方式)
printmiku,ruka (我们来看一下它的内容)
[age,14][age,14]
printid(miku),id(ruka) (我们来看一下它们的一级内存地址)
140031528692120140031528692120
print[id(x)forxinmiku],[id(x)forxinruka](我们来看一下其中每个元素的内存地址)
[140031528199680,[140031528199680,
(看到了吗?这样的引用,无论是一级的内存地址(内存地址中其实是一个地址池,存放二级元素的内存地址),还是二级的元素地址,都是一样的)
ruka[0]=agetest (我们来修改一个字符串元素试试看)
printmiku,ruka
[agetest,14][agetest,14] (都被修改了)
printid(miku),id(ruka)
140031528692120140031528692120 (一级内存地址没变)
print[id(x)forxinmiku],[id(x)forxinruka]
[140031528200544,[140031528200544, (看到了没有?第一个元素被修改后,内存地址变更了吧,并且都更新到了原有的列表中(上级地址池中))
ruka[1]=20 (网上有些文章说,python会直接修改整形变量,是不是这样呢?)
printmiku,ruka
[agetest,20][agetest,20] (都有发生了修改)
printid(miku),id(ruka)
140031528692120140031528692120 (一级地址依旧没变)
print[id(x)forxinmiku],[id(x)forxinruka]
[140031528200544,[140031528200544, (看到了吧!!!第二个元素的地址变了!!!并且也更新到了一级地址中,因此,这个也印证了我上述提出了两条大规则。)
浅复制(shallowcopy):
miku=[miku,[age,14]] (这里我们设置一个二维列表)
ruka=miku[:] (这是一个分段复制,同时也是一种浅复制,还可以使用list方法,如果是字典类型,那就需要copy方法了)
printmiku,ruka
[miku,[age,14]][miku,[age,14]]
printid(miku),id(ruka) (看到了吧,两个对象的一级内存地址就是不一样的)
140203261438576140203261508784
[id(x)forxinmiku],[id(x)forxinruka] (但是其中的二级内存地址,修改前是一样的。)
([140203261543888,140203262036376],[140203261543888,140203262036376])
[id(x)forxinmiku[1]],[id(x)forxinruka[1]] (三级内存地址,修改前也是一样的)
([140203261543984,,[140203261543984,)
ruka[0]=ruka (我们尝试修改一级列表下的一个字符串)
您可能关注的文档
- PP-105-V2.0 反冲错误处理维护流程.doc
- PP-106-V2.0 物料主数据收集流程.doc
- PS_项目预算与实际开发说明书.doc
- PS03_ 文档、日期、物料、版本.doc
- PS组补充编码的设想.doc
- PS最终用户小测验.doc
- PS最终用户小测验01.doc
- PS最终用户小测验02.doc
- PS最终用户小测验03.doc
- PTC Windchill PDMLink 11.0 文档管理功能.docx
- 自身免疫性肝炎研究进展2025.pdf
- 比亚迪E5 课件全套 项目1--7 纯电动汽车的认识与安全操作 ---- 空调、转向故障.pdf
- 原发性胆汁性胆管炎 2025.pdf
- 2024 在中国的美国企业特别报告.pdf
- 智能财税轮岗实务 课件项目四.pptx
- 新世纪放眼中国德语高级阅读教程教学课件Lektion 11_Der Chinesische Traum - Wunsch nach dem Wiederaufleben.pptx
- 新世纪放眼中国德语高级阅读教程教学课件Lektion 7_Chinas Raumfahrtwesen - Langer Marsch und Himmelpalast.pptx
- 新世纪放眼中国德语高级阅读教程教学课件Lektion 6_Wirtschaft - Made in China mit Innovation.pptx
- 新世纪放眼中国德语高级阅读教程教学课件Lektion 2_Chinesisch - Aussprache und Schriftzeichen.pptx
- 新世纪放眼中国德语高级阅读教程教学课件Lektion 12_Internationaler Austausch - Zusammenarbeit und gemeinsame Entwicklung.pptx
文档评论(0)