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、深拷貝,包含對象里面的子對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM