①直接赋值
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 无论多少层,两个变量的数据都是相互独立的