當乙個變數=***的時候,約定為: 指向位址的過程
如果copy.copy()拷貝的是元組,那麼它不會進行淺拷貝,僅僅是指向
因為元組是不可變資料型別,那麼意味著資料一定不能修改,因此用copy.copy的
時候它會自動判斷,是指向。
如果,用copy.copy() copy.deepcopy()對乙個全部是不可變型別的資料進行
資料拷貝,那麼它們的結果相同,都是指向。
如果拷貝的是乙個擁有可變型別的資料,那麼deepcopy依然是深拷貝,而copy.copy還是指向。
淺拷貝:copy.copy()
深拷貝:copy.deepcopy()
in [38]: import copy
in [39]: a = [11,22]
in [40]: b = [33,44]
in [41]: c = [a,b]
in [42]: c
out[42]: [[11, 22], [33, 44]]
in [43]: d = copy.copy(c) #d淺拷貝
in [44]: id(c)
out[44]: 140233732341960
in [45]: id(d)
out[45]: 140233713050888 #列表為可變資料型別,淺拷貝建立新位址,裡面的列表仍然為指向
in [46]: id(c[0])
out[46]: 140233732292488
in [47]: id(d[0])
out[47]: 140233732292488 #僅僅是指向
in [48]: id(a)
out[48]: 140233732292488
in [49]: e = copy.deepcopy(c) #e為深拷貝
in [50]: id(e)
out[50]: 140233732321800 #深拷貝,建立乙個新位址並且指向
in [51]: id(c)
out[51]: 140233732341960
in [52]: id(c[1])
out[52]: 140233731307720
in [53]: id(e[1])
out[53]: 140233713173832
in [54]: id(d[1])
out[54]: 140233731307720 #內部也建立新位址
in [55]: a = [11,22] #a,b均為列表
in [56]: b = [33,44]
in [57]: c = [a,b] #c為列表巢狀列表
in [58]: d = copy.copy(c) #d淺拷貝
in [59]: e = copy.deepcopy(c) #e深拷貝
in [60]: id(c)
out[60]: 140233732324104
in [61]: id(d)
out[61]: 140233740633608
in [62]: id(e)
out[62]: 140233732090888
in [64]: c
out[64]: [[11, 22], [33, 44], [55, 66]]
in [65]: d
out[65]: [[11, 22], [33, 44]] #de不變
in [66]: e
out[66]: [[11, 22], [33, 44]]
in [73]: a = [11,22] #a,b是列表
in [74]: b = [33,44]
in [75]: c = (a,b) #c是元組,不可變資料型別
in [76]: c
out[76]: ([11, 22], [33, 44])
in [77]: d = copy.copy(c) #d為淺拷貝
in [78]: id(c)
out[78]: 140233732322440
in [79]: id(d)
out[79]: 140233732322440 #d僅僅為指向
in [80]: e = copy.deepcopy(c) #e為深拷貝
in [81]: id(e)
out[81]: 140233713145672 #e建立了新位址
in [82]: id(c)
out[82]: 140233732322440
in [83]: id(c[1])
out[83]: 140233713122504
in [84]: id(e[1])
out[84]: 140233731173640 #e中索引值為1的元素新建位址
in [85]: id(d[1])
out[85]: 140233713122504 #d中索引值為1的元素仍然為指向
in [87]: c
out[87]: ([11, 22, 55], [33, 44])
in [88]: e
out[88]: ([11, 22], [33, 44])
:
列表
[,]
淺拷貝 裡面的不變 外面的變
深拷貝 裡面的變 外面的變
元組
(,) 淺拷貝 深拷貝 不變
(,) 淺拷貝 外面不變 裡面不變
深拷貝 外面的變 裡面的變
Python 淺拷貝與深拷貝
淺拷貝 構造方法或切片 做的是淺拷貝 即拷貝了最外層容器,副本中的元素是原容器中元素的引用 在 python 中,通過乙個物件向另外乙個物件賦值,實際僅僅是賦值了物件的引用,而非建立乙個物件並賦值。那如何真正拷貝物件呢?我們看一下兩種不同的拷貝方式。先從乙個示例看起 anndy anndy age ...
Python 淺拷貝與深拷貝
以下例項是使用 copy 模組的 copy.copy 淺拷貝 和 copy.deepcopy usr bin python coding utf 8 import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物件的引用 c copy.copy a 物件拷貝,淺拷貝 d copy....
Python深拷貝與淺拷貝
python有個內建的copy的模組專門用於處理深拷貝與淺拷貝,很實用,用起來也很方便,能為我們省去不少麻煩,不用自己再寫深拷貝或者淺拷貝物件的方法了。賦值,淺拷貝,深拷貝只針對可變變數,如list,dict,tuple python中賦值都是進行記憶體位址的傳遞 淺拷貝 copy,copy 只會賦...