python基础-深浅copy
一 深浅copy
#赋值运算,它们公用一个列表 a = [1,2,3] b = a a.append(666) print(a,b) #[1, 2, 3, 666] [1, 2, 3, 666]
# 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始
# 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性
# ## 浅copy: 创建另一个内存地址 l1 = [1,2,3] l2 = l1.copy() l1.append(666) print(l1,l2) #[1, 2, 3, 666] [1, 2, 3] print(id(l1),id(l2)) l1 = [1,2,3,[22,33]] l2 = l1.copy() l1[-1].append(666) print(l1,l2) # [1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33, 666]] print(id(l1),id(l2)) #第一层内存地址不一致 #4364259464 4364322504 print(id(l1[-1]),id(l2[-1])) #第二层内存地址一致 #4364323976 4364323976
对于深copy来说,两个是完全独立的了
import copy l1 = [1,2,3,[22,33]] l2 = copy.deepcopy(l1) print(l1,l2) #[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33]] print(id(l1),id(l2)) #第一层内存地址不一致 #4364233288 4364148872 print(id(l1[-1]),id(l2[-1])) # 第二层内存地址也不一致 #4364213448 4364233224