关于python中深浅拷贝问题

近期在日常工作中使用到python中拷贝的问题,之前都是一知半解的理解状态,今天闲来无事,在网上查了一些博文把相关的知识点整理并验证了一下,话不多说,看下文~~:

关于复制在python中有常用三种形式:

第一种:=

第二种:copy()

第三种:deepcopy()

下面逐一进行说明,并以示例辅助理解:

第一种情况:直接赋值 “=”

 

执行结果如下:

可见lis2与lis指向的对象完全相同,为了进一步说明,现在对lis进行修改操作

执行结果如下:

 总结:

在使用“=” 赋值的过程中,lis2指向与lis指向完全相同,故lis通过直接修改的方式进行原对象的修改,则lis2也会跟着修改。

第二种情况:浅拷贝copy()

 

 执行结果如下:

 

由上可见:lis3指向了新的对象,但是对象里面保存的元素还是与lis指向相同,现在对lis进行修改

执行结果如下:

总结:进行浅拷贝即copy()时,,拷贝的数据(lis3)中第一层元素(是简单的数据类型 即数字型,字符串类型时)并不会随着原数据(lis)的修改而变化,但是第二层元素(复杂的数据类型:列表,字典类型)会跟着原数据(lis)的修改而变化,以下有图进一步说明原因:

 

 第三种情况:深拷贝 deepcopy()

执行结果如下:

 如上:进行深拷贝以后,复制数据lis4也并不是完全创建了所有新的对象,比如第一个元素“a”,lis与lis4引用的就是同一个对象,对于嵌套的列表元素[1,2]会进行完全的新创建,这是不同于浅拷贝的地方,现在进行数据修改

 

执行结果如下:

总结:深拷贝导致嵌套的列表元素进行新的创建 ,所以原数据进行修改后,不会影响复制的数据list4的变化

 以上是我个人的理解,有不妥的地方欢迎大家指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值