Python中“=”、切片、copy和deepcopy

Python总的数据复制一般有四种 “=”,“切片”,“copy.copy()”,“copy.deepcopy()”

今天我们来重点分析下Python中的浅拷贝和深拷贝

1."=" 一般意义的复制

我们所说的一般意义的“等于号“相当于引用,即原始队列改变,被赋值的队列也会作出相同的改变。

直接赋值,传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变


2、列表切片

Python中列表切片是深拷贝,即被复制的对象作为一个一个新的个体独立存在,任意改变其一不会对另一个对象造成影响。


3、Python中的copy

copy是浅拷贝,并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了。

这里需要注意,对于简单对象来说,深拷贝、浅copy并没有区分,改变原始队列,赋值队列并不会改变。

但是对于嵌套队列来说,改变了子对象的值,浅拷贝会随之变化,深拷贝不会。


4、深拷贝 deepcopy

Python中的copy动作,对于一个复杂对象的子对象并不会完全复制,什么是复杂对象的子对象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是复杂对象的子对象。

对于子对象,浅拷贝动作会把它当作一个公共镜像存储起来,所有对他的复制都被当成一个引用,所以说当其中一个引用将镜像改变了之后另一个引用使用镜像的时候镜像已经被改变了。

对于子对象,深拷贝动作会将复杂对象的每一层复制一个单独的个体出来,因而二者完全独立。


  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值