Python深浅拷贝!

Python深浅拷贝!


今天博主跟大家聊一聊如何使用Python深浅拷贝!不喜勿喷,如有建议欢迎补充、讨论!

关于安装和汉化可以观看博主的这篇文章《下载安装及汉化 》以及Python系列:windows10配置Python3.0开发环境!,安装完毕重启VsCode!以及VSCode配置Python开发环境!


Come on!深浅拷贝

1. 浅拷贝:

在了解深浅拷贝时,我们先看一个拷贝列表的例子:

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''

ls1=["Mr_Chen","Sunny",[1,2,3]]
ls2=ls1.copy() #浅拷贝
# print(ls2)
#修改列表中的不可变数据类型,ls2变,ls1不变
ls2[0]="xiaojia"
print(ls1,ls2)
#输出为:['Mr_Chen', 'Sunny', [1, 2, 3]] ['xiaojia', 'Sunny', [1, 2, 3]]

#修改列表中的可变数据类型,ls2变,ls1也变
ls2[2][0]=6666
print(ls1,ls2)
#输出为:['Mr_Chen', 'Sunny', [6666, 2, 3]] ['xiaojia', 'Sunny', [6666, 2, 3]]

从上述例子中我们可以知道,对于浅拷贝,由ls1拷贝成ls2,当修改ls2中的不可变数据类型时,s1不发生变化;而当修改ls2中的可变数据类型是,s2则发生改变。

这是由于:浅拷贝–>拷贝的仅仅是原列表以及原列表元素中内存指针,故ls2中的不可变数据类型发生改变时,其内存指针也发生了改变,则当ls2[0]发生改变时,其内存指针发生改变,指向的不再存储"little-five"的内存空间,而是存放"xiaowu"的内存空间。故ls1不受影响。而当修改ls2中可变数据类型时,修改列表[1,2,3]中的元素时,该列表[1,2,3]的内存地址并不发生改变,故ls1和ls2的内存指针均指向该列表[1,2,3],故ls2发生该表,ls1也跟着改变。从下面例子可以看出可变数据类型和不可变数据类型的区别:

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''

#当修改不可变数据类型时,其内存指针发生改变
name="Sunny"
print(id(name))    #2351401446384
name="Mr_Chen"
print(id(name))    #2351401447024

#当修改可变数据类型,其内存指针不发生改变
lis=["zhangsan","lisi","wangwu"]
print(id(lis))      #2351401111048
lis[2]="wangmazi"
print(id(lis))      #2351401111048

我们也可以从下图更好的理解浅拷贝:

  • 修改数据前:
    在这里插入图片描述

  • 修改数据后:
    在这里插入图片描述

2. 深拷贝

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''
import copy #导入拷贝模块
ls3=["zhangsan","lis","wnagwu",[1,2,3]]
#ls5=copy.copy(li3) #浅拷贝
ls4=copy.deepcopy(ls3) #深拷贝
print(ls4) 

ls4[0]="Mr_ChenYongJia"
print(ls3,ls4)   #输出为:['zhangsan', 'lis', 'wnagwu', [1, 2, 3]] ['Mr_ChenYongJia', 'lis', 'wnagwu', [1, 2, 3]]
ls4[3][0]=666
print(ls3,ls4)   #输出为:['zhangsan', 'lis', 'wnagwu', [1, 2, 3]] ['Mr_ChenYongJia', 'lis', 'wnagwu', [666, 2, 3]]

从上述例子可以看出,ls3与ls4再无任何关联,这是由于ls4拷贝过来时,其拷贝的不止内存指针,同时还创建新的内存空间,并将数据拷贝至新的内存空间。故新的内存指针指向新的内存空间。


到这里:Python深浅拷贝!分享完毕了,快去试试吧!


最后

  • 更多参考精彩博文请看这里:陈永佳的博客

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈永佳

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值