1. 程式人生 > >python3中淺拷貝與深拷貝的實現方式、區別

python3中淺拷貝與深拷貝的實現方式、區別

python3淺拷貝與深拷貝的實現方式、區別:

list1 = [1,2,3]
list2 = list1
list1[0] = 0
print(list2)
print(list1)
列印的結果: [0, 2, 3]
[0, 2, 3]
小結: 通過把一個列表變數名賦值給另一個變數名,只是把一個列表變數名list1的指引賦值給另一個變數名list2,使list1和list2都指向[1,2,3],所以當列表中的一個元素改變了,list1和list2都變了.
list1 = [1,2,3]
list2 = list1.copy()
list1[0] = 0
print(list2)
print(list1)
列印的結果: [1, 2, 3]
[0, 2, 3] 小結:copy函式是又開闢了一個記憶體空間,裡面放有1,2,3,使list2指向新開闢的記憶體空間,所以list1的元素變化並不影響list2.
list1 = [[4,5,6],2,3]
list2 = list1.copy()
list1[0][0] = 0
print(list2)
print(list1)
列印結果: [[0, 5, 6], 2, 3]
[[0, 5, 6], 2, 3]
小結:copy函式有個坑,當列表中巢狀小列表時,用copy函式,外面的大列表開闢了一個新的記憶體空間,但裡面的子列表只是賦值了指引,都指向[4,5,6],所以當作為子列表的整體改變時,兩個列表互不影響,當作為子列表的元素改變時,兩個列表同改變,那麼在這種情況下,怎麼實現兩個列表互不影響呢?
list1 = [[4
,5,6],2,3] list2 = copy.deepcopy(list1) list1[0][0] = 0 print(list2) print(list1)
列印結果: [[4, 5, 6], 2, 3]
[[0, 5, 6], 2, 3]
小結:當列表中巢狀子列表時,用deepcopy可以開闢大空間同時開闢大空間中的小空間放子列表,實現一個列表中的子列表元素值變化,而另一個列表不變