复制之深浅copy

①直接赋值

s1 = [1, 2, 3]
s2 = s1  # 指向同一块内存
s1.append(666)
print(s1, s2)   # 一个值的修改 会同时影响两个变量

②浅copy

s1 = [1, 2, 3, [11, 22]]
s2 = s1.copy()
s1.insert(0, 666)
s1[-1].append(666)
print(s1, s2)
print(id(s1), id(s2))  # 浅copy 第一层各自独立,从第二层开始,共用一个内存地址。
print(id(s1[-1]), id(s2[-1]))
s1 = [1, 2, 3, [11, 22]]
s2 = s1[:]
s1[-1].append(666)  # 切片实际上也是一种浅copy
print(s1, s2)

③深copy 

import copy  # (深copy需要引用模块)

s1 = [1, 2, 3, [11, 22]]
s2 = copy.deepcopy(s1)
s1.append(666)
print(s1, s2)

import copy

s1 = [1, 2, 3, [4, 5]]
s2 = copy.deepcopy(s1)
s1[-1].append(666)
print(s1, s2)  # 深copy 无论多少层,两个变量的数据都是相互独立的

猜你喜欢

转载自www.cnblogs.com/lidavid/p/9083115.html