python - 深淺拷貝
阿新 • • 發佈:2021-10-27
前言
在Python中一切皆物件,任何物件都有三個屬性:唯一標識、型別、值。
id() ,是Python的一個內建函式,返回物件的唯一標識,用於獲取物件的記憶體地址。
對於某個物件,如何建立它的拷貝,就是說如何建立與該物件具有相同值的另外一個物件?
L1 = [[1, 2], 9]
L2 = L1[:] # 使用切片
print(L2) # [[1, 2], 9]
判斷 L1 和 L2 是否使用了相同的記憶體地址。
L1 = [[1, 2], 9] L2 = L1[:] print(L2) # [[1, 2], 9] print("L1記憶體地址:%s" % id(L1)) # 3757064 print("L2記憶體地址:%s" % id(L2)) # 31379592
由此可見,L1和L2使用了不同的記憶體地址。
判斷 L1 和L2 中對應的兩個元素引用的列表物件是否一樣
L1 = [[1, 2], 9]
L2 = L1[:]
print(L2) # [[1, 2], 9]
print("L1[0]記憶體地址:%s" % id(L1[0])) # 1856008
print("L2[0]記憶體地址:%s" % id(L2[0])) # 1856008
print("L1[1]記憶體地址:%s" % id(L1[1])) # 8791123393856
print("L2[1]記憶體地址:%s" % id(L2[1])) # 8791123393856
列表 L1 和 L2 中的整數物件的記憶體地址是一樣的。
淺拷貝
對於某個物件,雖然建立了與該物件具有相同值的另外一個物件,但是這兩個物件內部巢狀的對應子物件全部都是同一個物件。就是說外部進行了拷貝,內部沒有進行拷貝。
總結
以下方式得到的拷貝都是淺拷貝:
1、切片操作
2、呼叫列表、字典、集合的操作 copy
3、呼叫標準庫模組copy中的copy
L2 = L1.copy()
L2 = list(L1)
L2 = copy.copy(L1)
得到的結果都是一樣的