浅拷贝和深拷贝的区别

  • 深拷贝是指创建一个新对象,并完全递归创建其所包含的自对象。 新创建的对象修改不用影响已有的对象。

  • 浅拷贝是指对象赋值时,其中一部分指向一个已经存在的对象,而不是完全拷贝生成一个新对象。新的对象 修改会影响到已有的对象,例如:

    >>> 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。