浅拷贝和深拷贝的区别¶
深拷贝是指创建一个新对象,并完全递归创建其所包含的自对象。 新创建的对象修改不用影响已有的对象。
浅拷贝是指对象赋值时,其中一部分指向一个已经存在的对象,而不是完全拷贝生成一个新对象。新的对象 修改会影响到已有的对象,例如:
>>> a = [1, [1,2,3,4]] >>> b = a[:] >>> id(a) 44551944 >>> id(b) 44551704 >>> id(a[1]) 44615600 >>> id(b[1]) 44615600
>>> a[1][1]=100 >>> a [1, [1, 100, 3, 4]] >>> b [1, [1, 100, 3, 4]]
现在有a,b两个不同的对象,但其内容指向的对象是一个。如果我们修改了其中一个, 另外一个也会发生改变。这就是浅拷贝。
>>> import copy
>>> c = copy.deepcopy(a)
使用copy.deepcopy的函数进行拷贝,此时拷贝就是深拷贝,a的修改就不会影响c。