Python如何实现深浅拷贝
admin
2023-07-14 13:44:58
0

一、浅拷贝

浅拷贝,记住一点,浅拷贝不管多复杂,只copy第一层,看图说话。
1、定义源列表list_s,列表list_c,并进行拷贝操作,查看两列表的值相等,如下图所示。

Python如何实现深浅拷贝
2、现在源列表list_s数据更改,增加数值list_s.append(3),list_s数值改变,而列表list_c的值不变,如下图所示。
Python如何实现深浅拷贝
3、现在list_c数据更改,增加数值list_c.append(4),list_c数值改变,而源列表list_s的数值保持不变,如下图所示。
Python如何实现深浅拷贝
由以上三步操作可以看出,源list_s里面嵌套了[3,4]列表,对源list_s进行追加3,发现list_s数值改变,而list_c数值没有改变,而对list_c追加4,发现list_s数值未改变,而list_c数值改变了,那么对源list_s里面的[3,4]进行改变,看list_s和list_c数值会发生怎样的变化,继续往下看。
4、修改源list_s里面的[3,4]值,增加5,变成[3,4,5],发现源list_s改变,list_c数值也发生改变,而且,两者更改的地方是一样的,都变成了[3,4,5],如下图所示。
Python如何实现深浅拷贝
5、那么修改list_c里面的[3,4,5]值,增加6,变成[3,4,5,6],发现list_c改变,源list_s数值也发生改变,而且,两者更改的地方是一样的[3,4,5,6],如下图所示。
Python如何实现深浅拷贝
由以上两步操作可以看出,不管是源list_s,还是list_c改变列表中嵌套的列表[3,4]的值时,源list_s和list_c都会发生改变,而且变化一样。
从内存地址来看,如下图所示。
Python如何实现深浅拷贝

绿色的为追加的内容,可以看出,进行浅拷贝之后,列表中嵌套的列表[3,4]指向的内容以及地址,并未发生改变,所以,不论[3,4]发生什么样的改变,llist_s和list_c都会发生同样的改变,而第一层的列表,list_s和list_c都是相互独立的,两者发生改变不会影响对方。

综上所述,浅拷贝只拷贝第一层,深层次的数据改变都会影响其他.

二、深拷贝

搞明白浅拷贝之后,深拷贝就很好理解了,深拷贝就是在内存中重新开辟一块空间,不管数据结构有多复杂,只要数据发生改变,就重新开辟一块内存空间把内容复制下来,直到最后一层,通俗点讲就是,深拷贝就是重新定义一个变量,于之前的没有半毛钱关系,所以更改里面的内容,原来的并不会发生改变。举例说明,如下图所示。
Python如何实现深浅拷贝
定义list_s=[1,2,[3,4]],而list_c进行深拷贝,初始值,两者一样,然后对list_s追加3,对list_c中的列中中的列表[3,4]追加5,发现,list_s为[1,2,[3,4],3], list_c为[1,2,[3,4,5]]彼此的变化并没有影响对方。

相关内容

热门资讯

特朗普:正致力于与伊朗达成协议... 特朗普在《纽约邮报》一档播客访谈节目中称,他正与伊朗磋商一项协议,伊朗已同意不再谋求拥有核武器。他表...
不接壤的日菲为何偷划海界? 日菲近日发表联合声明,宣称就“划定两国专属经济区和大陆架的海洋边界”启动正式谈判。两个隔海相望的国家...
凤凰晚报丨从钳工到老戏骨,魏宗... 今日人物【从钳工到老戏骨,魏宗万用一生诠释“戏比天大”】6月1日,表演艺术家魏宗万在上海逝世,享年8...
科威特称伊朗袭击致63人受伤 科威特卫生部门3日称,伊朗当天对科威特的袭击已造成63人受伤,相关部门已启动紧急应对预案,并在全国范...
日本标榜“和平国家”却行扩军备... 今年是东京审判开庭80周年,世界正回望历史、反思战争罪责、捍卫二战后来之不易的国际秩序之际,日本却迈...
浙江杨梅即将大规模上市,如何破... “我们现在的压力很大。”5月底,浙江余姚杨梅产区丈亭镇副镇长林宇站在一片杨梅林前对第一财经表示,当地...
致5死2伤!韩国就韩华航空航天... 【环球网报道 记者 姜蔼玲】据韩联社6月1日报道,针对位于韩国大田的韩华航空航天公司发生爆炸致7人伤...
黄河科技学院2026年招生简章 长按图片识别二维码或点击 “阅读原文” 查看电子招生简章。
医路起航,从“心” 开始!黄河... 6月1日上午,黄河科技学院附属医院2022级临床医学本科实习生入院岗前培训在大医讲堂顺利举办。院领导...
问题居然在实体卡槽上!美版iP... 6月2日消息,日前,又有博主提前把还没发布的iPhone 18 Pro电池参数给曝光了出来,根据爆料...