Python 的复制有浅复制和深复制之分:

等于号

import copy
a = [1,2,3]
b = a
id(a) #  id() 函数用于获取对象的内存地址
>>> 139935155645768
id(b)
>>> 139935155645768
print(id(a)==id(b)) #  可以发现 a b 的对象内存地址完全相同
>>> True
b[0] = 11 # 此时改变b
print(a)
>>> [11,2,3] # a 随之改变
a[1] = 22
print(b)
[11,22,33] # 同理

使用等于号,则两者的对象内存地址完全相同,两者改变互相牵连。

浅复制

import copy

# shallow copy
a = [1,2,[3,4]]
b = a
d = copy.copy(a) # copy.copy 潜复制
print(id(a)==id(d))
>>> False #  发现 a d 列表的第一层的对象内存地址不同
print(id(a[2]) == id(d[2])) # 但是第二层对象内存地址相同
d[1] = 222222
print (a)
>>> [11,22,3]
ptint (d)
>>> [11,222222,3]
d = [1,2,[3,4]]

浅复制中列表的第一层指向不同的储存位置,两者不会互相改变。但是第二层指向相同的储存位置,改变是互相牵连的

深复制

# deep copy
a = [1,2,[3,4]]
c = copy.deepcopy(a)
print(id(a) == id(c))
c[1] = 2
print(a)
a[1] = 111
print(c)
>>>
False
[1, 2, [3, 4]]
[1, 2, [3, 4]]

深复制是完完全全的复制,所有的元素的指向不同的对象内存地址。