python學習之深淺拷貝
阿新 • • 發佈:2018-06-13
ron deep 沒有 pen 數據類型 拷貝 內存地址 strong pre
深淺拷貝
淺拷貝:
1、針對的是可變數據類型:list、dict、set ,不可變數據類型int、str、tuple、bool 是沒有拷貝一說的,他們都沒copy() 方法
2、淺拷貝後是在內存地址中分配了一份新的地址,且淺拷貝只拷貝了第一層,第二層不會拷貝,故第二層如果改變,原數據及淺拷貝後的數據也將改變
3、= 賦值不是淺拷貝,[:] 切片是淺拷貝
a = [11,22,[11,22]]
b = a
註:以上稱為賦值,只是將a,b都指向了同一個內存地址
a.append(33)
print(b)
>>> [11,22,[11,22],33] 還是一起改變,b和a都是列表的內存地址的兩個別名
c = a.copy() 用方法copy是淺拷貝,id(a) 與 id(c) 的內存地址是不同的
3、切片是淺拷貝
1 lis = [11,22,[11,22]] 2 qie = lis[:] 3 lis[2].append(33) 4 print(lis,qie) # [11, 22, [11, 22, 33]] [11, 22, [11, 22, 33]] 5 print(id(lis),id(qie)) # 1482689615624 1482689615752
深拷貝:
就是將原文件內部元素完全拷貝,不會將因為第二層元素改變,另一個也會改變
深拷貝方法:
import copy
list_new = copy.deepcopy()
python學習之深淺拷貝