1. 程式人生 > >python列表的複製,扯一下淺拷貝與深拷貝的區別

python列表的複製,扯一下淺拷貝與深拷貝的區別

將一個列表的資料複製到另一個列表中。
使用列表[:],可以呼叫copy模組

import copy

A = [21,22,23,24,['a','b','c','d'],25,26]
B = A                                       #直接賦值
C = A[:]                                    #淺拷貝
D = copy.copy(A)                            #淺拷貝
E = copy.deepcopy(A)                        #深拷貝

#看看深拷貝與淺拷貝的區別
#在A陣列的最尾處加一個數 A.append(99) #在A數組裡面的陣列最尾處加一個數 A[4].append(66) print("起始列表A------------>",A) print("直接把A列表賦值給B---->",B) print("直接淺拷貝A列表給C---->",C) print("直接淺拷貝A列表給D---->",D) print("直接深拷貝A列表給E---->",E)

 

執行結果如下:
起始列表A------------> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99] 直接把A列表賦值給B----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99] 直接淺拷貝A列表給C----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26] 直接淺拷貝A列表給D----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26] 直接深拷貝A列表給E----> [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]

通過以上的例子我們來分析一下這幾種複製列表的不同

1、直接賦值,其實就是預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的B也會做相同的改變

2、淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件也會改變

3、深拷貝,包含物件裡面的子物件的拷貝,所以原始物件的改變不會造成深拷貝里任何子元素的改變