浅拷贝
简单赋值其实也是一种浅拷贝。通过下面的例子我们可以看到,即使提前将ls的值赋给了ls1,后面对ls进行排序时,ls1的值也排序了。
>>> ls = [1,3,2]
>>> ls1=ls
>>> ls1
[1, 3, 2]
>>> ls.sort()
>>> ls
[1, 2, 3]
>>> ls1
[1, 2, 3]
>>>
这是因为他们访问的都是用一个地址。我们可以看到浅拷贝两个变量的内存地址是一样的,也就是说他们读取的是同一个值。所以,无论对哪一个变量进行操作都会影响另外一个变量。
>>> id(ls)
1892911702600
>>> id(ls1)
1892911702600
深拷贝
我们将深拷贝的值赋值给ls2,我们可以看到修改ls值的顺序不会修改ls2的值。
>>> import copy
>>> ls = [1,3,2]
>>> ls2 = copy.deepcopy(ls)
>>> ls.sort()
>>> ls
[1, 2, 3]
>>> ls2
[1, 3, 2]
这是因为深拷贝会为拷贝的变量重新开一个内存地址,所以这个两个变量访问的不是同一个地址,也就不会相互影响。
>>> id(ls2)
1892914247304
>>>