简而言之,浅拷贝指只拷贝父对象。而深拷贝指既拷贝父对象,又拷贝全部子对象。
具体测试如下:
1.浅拷贝
#测试浅拷贝
import copy
def testCopy():
a = [1,2,[3,4]]
b = copy.copy(a) #浅拷贝
b.append(99) #修改b所拷贝的父对象,不影响a所指向的父对象
b[2].append(666) #修改b父对象所对应的子对象,会影响到a,因为两者共用想同子对象
print('a',a)
print('b',b)
testCopy()
结果为:
a [1, 2, [3, 4, 666]]
b [1, 2, [3, 4, 666], 99]
可见只有修改子对象的操作影响到了a,而修改父对象的操作只在b相应拷贝的父对象中进行,并没有影响到a。
2.深拷贝
#测试深拷贝
def testDeepcopy():
a = [1,2,[3,4]]
b = copy.deepcopy(a) #深拷贝
b.append(99) #修改b所拷贝的父对象,不影响a所指向的父对象
b[2].append(666) #修改b父对象所对应的子对象,不会影响到a
print('a',a)
print('b',b)
testDeepcopy()
结果为:
a [1, 2, [3, 4]]
b [1, 2, [3, 4, 666], 99]
可见b中进行的全部操作都对a没有任何影响,因为b既拷贝了父对象又拷贝了子对象,所有操作全在b的拷贝对象中进行。