python的深浅拷贝认识

以下以可变数据list为例子,对深浅拷贝进行区分:

拷贝类型: 赋值,浅拷贝,深拷贝

(一)赋值拷贝

python的深浅拷贝认识

 

赋值拷贝很好理解,赋值本质上只是给原对象新增一个引用而已,所以拷贝对象和被拷贝对象为同一个对象,对拷贝对象进行修改本质上就是对被拷贝对象进行修改

(二)浅拷贝

python的深浅拷贝认识

浅拷贝是一种对拷贝了最外围的对象本身,所以是一个新的对象,因此他们的地址是不一样,内容一样。但是对于原对象内部的元素却只是拷贝了一个引用而已,因而称之为浅拷贝。简单的说就是把对象复制一遍,但是该对象中引用的其他对象我不复制。在上述代码中可见,当我们对拷贝对象最外围数据做修改时,原对象并不受影响,此时体现的是两个对象。而一旦我们对拷贝对象中引用的内部对象(即list中的list)做修改时,原对象会受到影响,因为此时体现的是两个对象的引用关系。(引用本质上体现出来的是同一个对象)

(三)深拷贝

python的深浅拷贝认识

深拷贝体现出来的就是两个绝对无关的对象(地址不一样,只是内容相同),所以,对拷贝对象做任何程度的修改都不影响原对象,即被拷贝对象

 

至于不可变数据由于其不可变性质(对数据不能修改)也就无所谓深浅拷贝了。不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的。

深浅拷贝的作用

1,减少内存的使用
2,以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。