深浅copy
1、赋值运算
a = [1, 2, 3] b = a a.append(666) print(b) #output:[1, 2, 3, 666]
对于赋值运算来说,a与b指向的是同一个内存地址,所以他们是完全一样的。
2、浅copy
# 对于浅copy来说,第一层是完全独立的,从第二层会开始公用一个内存地址 l1 = [1, 2, 3] l2 = l1.copy() l1.append(66) print(l2) print(id(l1), id(l2)) l1 = [1, 2, 3, [4, 5]] l2 = l1.copy() l1[3].append(66) print(l2) print(id(l1[-1]), id(l2[-1]))
#output:
[1, 2, 3]
31211848 35431560
[1, 2, 3, [4, 5, 66]]
35432264 35432264
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
3、深copy deepcopy
import copy l1 = [1,2,3, [4,5]] l2 = copy.deepcopy(l1) l1[-1].append(66) print(l1, l2)
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。