1. 程式人生 > 實用技巧 >python(深淺拷貝)

python(深淺拷貝)

深淺拷貝

變數賦值相當於貼標籤

淺拷貝

#在同一程式碼塊下:
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.淺拷貝的定義,深拷貝的定義.

答案:

淺拷貝的列表在記憶體中重新建立,列表內的元素都是公用的

深拷貝的列表在記憶體中重新建立,列表內不可變元素是公用的,可變元素即(列表)是重新建立的