小白学Python:Python深浅拷贝! | 八月更文挑战

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战


?前言

寻找光的过程,就是向上爬的过程

纯真的【苏醒】、海上的【告别】、傍晚的【遗憾】、山中的【约定】、平凡的【妥协】、自我的【同行】、美好的【相遇】、社恐的【停顿】、表达的【倾听】、勇敢的【探索】,最终发现,【爱】是雾中的灯塔,指引着出海时的彼岸,也是向往的归宿。所以,“幼鸟”们,当落定所有声色,也别忘记哼着歌。——幼鸟指南

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

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


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深浅拷贝!分享完毕了,快去试试吧!


?最后

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

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享