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

来源:互联网 发布:multisim mac 编辑:程序博客网 时间:2024/05/16 09:32

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

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

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

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

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


2、列表切片

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


3、Python中的copy

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

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

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


4、深拷贝 deepcopy

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

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

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


原创粉丝点击