Python:深浅copy
浅copy
浅拷贝就是对引用的拷贝,执拷贝父对象,里面的数据不拷贝出来,其中的数据与原对象里面数据用的是相同的地址空间
#浅copy 第一层各自独立,从第二层开始,共用一个内存地址 s1 = [1, 2, 3,[11,22]] s2 = s1.copy() s1[-1].append(666) #在s1最后增加元素‘666’,s2也会增加 print(s1, s2) print(id(s1), id(s2)) #打印s1与s2的id号,是不同的 print(id(s1[-1]), id(s2[-1])) #打印s1与s2中子列表的id号,是相同的 [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]] 52642760 53470992 53471152 53471152
切片 浅copy
s1 = [1, 2, 3, [11, 22]] s2 = s1[:] s1.insert(1,66) print(s1, s2) s1[-1].append(666) print(s1, s2) [1, 66, 2, 3, [11, 22]] [1, 2, 3, [11, 22]] [1, 66, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]
深copy
深copy 无论多少层,都是互相独立的。
import copy #深copy 需要使用copy模块 s1 = [1, 2, 3,[11,22]] s2 = copy.deepcopy(s1) s1.append(666) print(s1, s2) s1 = [1, 2, 3,[11,22]] s2 = copy.deepcopy(s1) s1[-1].append(666) print(s1, s2) [1, 2, 3, [11, 22], 666] [1, 2, 3, [11, 22]] [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22]]