python(深淺拷貝)
阿新 • • 發佈:2020-09-12
深淺拷貝
變數賦值相當於貼標籤
淺拷貝
#在同一程式碼塊下:
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 可變的不共用重新建立
對於深拷貝來說,
思考:
1.淺拷貝的定義,深拷貝的定義.
答案:
淺拷貝的列表在記憶體中重新建立,列表內的元素都是公用的
深拷貝的列表在記憶體中重新建立,列表內不可變元素是公用的,可變元素即(列表)是重新建立的