变量赋值相当于贴标签
浅拷贝
#在同一代码块下:
a1 = [1,2, [3,1]]
b1 = a1.copy()
b1相当于在内存中重新开辟了一块新的内存地址,与a1不的id不同.不过其内部元素引用是公用的
# 在不同代码块下:
也是同理
深拷贝
# 同一代码块下
import copy
l1 = [1, ‘alex‘, True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2)) # 2788324482440 2788324483016 #
print(id(l1[0]),id(l2[0])) # 1470562768 1470562768
print(id(l1[-1]),id(l2[-1])) # 2788324482632 2788324482696
print(id(l1[-2]),id(l2[-2])) # 2788323047752 2788323047752
for i in range(len(l1)-1):
... print(id(l1[i]), id(l2[i]))
...
140704271531072 140704271531072 #0 公用
1986645091248 1986645091248 #1 公用
140704271028752 140704271028752 #2 元组公用
1986645375080 1986645375080 #3 可变的不共用重新创建
对于深拷贝来说,
浅拷贝的列表在内存中重新创建,列表内的元素都是公用的
深拷贝的列表在内存中重新创建,列表内不可变元素是公用的,可变元素即(列表)是重新创建的
原文:https://www.cnblogs.com/sunnywillow/p/13657554.html