首页IT科技python中深拷贝和浅拷贝区别(Python深浅拷贝的理解)

python中深拷贝和浅拷贝区别(Python深浅拷贝的理解)

时间2025-04-29 10:09:50分类IT科技浏览3449
导读:1.拷贝 拷贝实际上其实就是在赋值,比如我们有一个列表L1,定义另一个列表L2引用列表L1,实际上就是在拷贝列表L1的值,由于由于L1列表是可变的数据类型,所以当L1的值变的时候,L2的值也是在跟着变的.那其实就算L1内的是不可变的数据类型,L1的内容变化,L2的内容也一样会随之变化的...

1.拷贝

拷贝实际上其实就是在赋值           ,比如我们有一个列表L1                 ,定义另一个列表L2引用列表L1      ,实际上就是在拷贝列表L1的值     ,由于由于L1列表是可变的数据类型                 ,所以当L1的值变的时候            ,L2的值也是在跟着变的.那其实就算L1内的是不可变的数据类型     ,L1的内容变化                ,L2的内容也一样会随之变化的

# # 拷贝(赋值) # Python学习交流QQ群:153708845 lt = [1, 2, 3] lt2 = lt lt.append(4) print(lt) # [1, 2, 3, 4] # 因为列表是可变类型            ,所以lt的值变化,lt2的值也会跟着变化 print(lt2) # [1, 2, 3, 4]

2.浅拷贝

浅拷贝时                ,我们时需要在写代码前import.copy,导入copy的方法                 ,其实列表在内存空间里是以索引的形式存在的,索引指向的才是对应的具体的值           ,那当我们用L2去copy列表L1的时候                 ,那他们两个列表的索引只想的值都是一样的      ,如果L1的某一索引对应的值有变化的时候           ,L2这个列表是否变化是取决于L1列表变化的那个索引的值是否为可变化数据类型           。也就是说当L1列表内的数据是可变化类型的化                 ,L2会随之变化:L1列表内的数据是不可变的数据类型      ,那L2列表的数据则不会跟着变化                 。

# 浅拷贝 # copy.copy() import copy l1 = [xichen,nick,egon,[rockey,pilipili]] l2 = copy.copy(l1) l1.append(xuchen) print(l1) # [xichen, nick, egon, [rockey, pilipili], xuchen] print(l2) # [xichen, nick, egon, [rockey, pilipili]] l1[-1].append(xucheng) print(l1) # [xichen, nick, egon, [rockey, pilipili, xucheng]] print(l2) # [xichen, nick, egon, [rockey, pilipili, xucheng]]

3.深拷贝

深拷贝和浅拷贝一样     ,在写代码之前需要import.copy导入copy的方法                 ,但是我们深拷贝的时候用的是deepcopy            ,其他的语法和浅拷贝是一样的     ,但是深拷贝和浅拷贝不一样的是                ,深拷贝不管列表L1里面的内容是可变还是不可变的            ,当L1变化的时候,L2列表里面的数据都不会改变的

import copy lt = [1000, 2000, 3000, [4000, 5000, 6000]] print(id(lt),id(lt)) print(id(lt[0]), id(lt[0])) print(id(lt[1]), id(lt[1])) print(id(lt[2]), id(lt[2])) print(id(lt[3]), id(lt[3])) print(* * 50) # id(lt) 2608713900296 # id(lt[0]) 2608710450544 # id(lt[1]) 2608593350352 # id(lt[2]) 2608594909872 # id(lt[3]) 2608713954696 ************************************************** lt2 = copy.deepcopy(lt) print(id(lt2),id(lt2)) print(id(lt2[0]), id(lt2[0])) print(id(lt2[1]), id(lt2[1])) print(id(lt2[2]), id(lt2[2])) print(id(lt2[3]), id(lt2[3])) print(* * 50) # id(lt2) 2608713900616 # id(lt2[0]) 2608710450544 # id(lt2[1]) 2608593350352 # id(lt2[2]) 2608594909872 # id(lt2[3]) 2608713900744 **************************************************

总结:

牢记: 拷贝/浅拷贝/深拷贝 只针对可变数据类型 拷贝: 当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化简单的赋值 浅拷贝:当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2不变化copy.copy() 可变数据的类型中的内置方法.copy() 深拷贝: 当lt2为lt的深拷贝对象时,lt内的可变类型变化,lt2不变化;lt内的不可变类型变化,lt2不变copy.deepcopy()

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
数据采集软件的使用实验报告(数据采集器软件-数据采集技术有哪些) 打造具备营销性的企业网站(如何让网站内容更具吸引力)