一 深浅 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
来源: http://www.bubuko.com/infodetail-2561902.html