深淺拷貝 python

艾利金德發表於2017-12-26
淺拷貝:是對於一個物件的頂層拷貝,通俗理解:拷貝了引用,並沒有拷貝內容
  • 程式碼說明

import copy
a = [11, 22]
b = [33, 44]
c = [a, b]
d = c[:]
f = copy.copy(c)
print(id(c))
print(id(d))複製程式碼
執行結果:

2473847637832
2473847637896複製程式碼
給列表c追加元素

c.append(99)
print(c)
print(d)
print(f)複製程式碼
執行結果:

[[11, 22], [33, 44], 99]
[[11, 22], [33, 44]]
[[11, 22], [33, 44]]複製程式碼
再給a追加元素:

a.append(66)
print(c)
print(d)
print(f)複製程式碼
執行結果:

[[11, 22, 66], [33, 44], 99]
[[11, 22, 66], [33, 44]]
[[11, 22, 66], [33, 44]]複製程式碼
解釋說明:d、f列表和c列表都是引用了a,b列表,所以當a或者b元素改變時,d、f和c列表都會改變;也說明了[:] 是淺拷貝。
深拷貝:是對於一個物件所有層次的拷貝(遞迴)
  • 程式碼說明

import copy
a = [11, 22]
b = [33, 44]
c = [a, b]
d = copy.deepcopy(c)複製程式碼
給a, c 同時追加元素

a.append(66)
c.append(99)
print(a)
print(c)
print(d)複製程式碼
執行結果:

[11, 22, 66]
[[11, 22, 66], [33, 44], 99]
[[11, 22], [33, 44]]複製程式碼
解釋說明:當a和c列表改變時,d列表並沒有改變,這個就是深拷貝,即是遞迴對每一個元素的拷貝。
注意:對不可變型別的深淺拷貝都是對其的引用,值和id都不會改變


相關文章