1、概念
在python中对象的赋值其实就是对象的引用,当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用而已。
浅拷贝
拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已,也就是把对象赋值一遍,但是该对象引用的其他对象不复制。
深拷贝
外围和内部元素都进行了拷贝对象本身,而不是引用,也就是把对象赋值一遍,并且该对象中引用的其他对象我也复制。
2、深浅拷贝的作用
1、减少内存的使用
2、以后在做数据的清洗,修改或者入库的时候对原数据进行复制一份,以防数据修改后,找不到原数据。
3、浅拷贝
copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象也会改变
# coding:utf8
import copy
a=[1,2,3,[]]
c = copy.copy(a)
print a
print c
#没有修改子对象
a.append(4)
print a
print c
#修改子对象
a[3].append(5)
print a
print c
输出结果为
[1, 2, 3, []]
[1, 2, 3, []]
[1, 2, 3, [], 4]
[1, 2, 3, []]
#原始数据的子对象变了,新数据的子对象也变了。
[1, 2, 3, [5], 4]
[1, 2, 3, [5]]
4、深拷贝
深拷贝,包含对象里边的自对象的拷贝,所以原始对象的改变不会造成深浅拷贝里任何子元素的改变
# coding:utf8
import copy
a=[1,2,3,[]]
d = copy.deepcopy(a)
print 'a:',a
print "d:",d
a.append(4)
print "a:",a
print "d:",d
a[3].append(5)
print "a:",a
print "d:",d
输出结果:
a: [1, 2, 3, []]
d: [1, 2, 3, []]
a: [1, 2, 3, [], 4]
d: [1, 2, 3, []]
a: [1, 2, 3, [5], 4]
d: [1, 2, 3, []]
发现d 一直没有改变