淺拷貝只拷貝了引用,並沒有拷貝內容,相當於把原來的引用複製了乙份給新的變數
深拷貝是將原來的值複製了乙份到新的地方
in [30]: a=[1,2,3]
in [31]: b=a
in [32]: id(a)
out[32]: 140618626865352
in [33]: id(b)
out[33]: 140618626865352
in [34]: import copy
in [35]: c = copy.d
copy.deepcopy copy.dispatch_table
in [35]: c = copy.deepcopy(a)
in [36]: id(c)
out[36]: 140618627080392
in [37]: a=[1,2]
in [38]: a
out[38]: [1, 2]
in [39]: b
out[39]: [1, 2, 3]
in [40]: b=a
in [41]: a
out[41]: [1, 2]
in [42]: b
out[42]: [1, 2]
in [44]: a
out[44]: [1, 2, 4]
in [45]: b
out[45]: [1, 2, 4]
in [46]: c
out[46]: [1, 2, 3]
in [47]: a=[1,2,3]
in [48]: b=[4,5,6]
in [49]: c=[a,b]
in [50]: d=copy.deepcopy(c)
in [51]: c
out[51]: [[1, 2, 3], [4, 5, 6]]
in [52]: d
out[52]: [[1, 2, 3], [4, 5, 6]]
in [53]: id(c)
out[53]: 140618626186888
in [54]: id(d)
out[54]: 140618627245000
in [56]: c
out[56]: [[1, 2, 3, 5], [4, 5, 6]]
in [57]: d
out[57]: [[1, 2, 3], [4, 5, 6]]
d是c的深拷貝,裡面的內容也是深拷貝,是遞迴的拷貝
in [58]: a=[1,2,3]
in [59]: b=[4,5,6]
in [60]: c=[a,b]
in [61]: d=copy.copy(c)
in [62]: c
out[62]: [[1, 2, 3], [4, 5, 6]]
in [63]: d
out[63]: [[1, 2, 3], [4, 5, 6]]
in [64]: id(c)
out[64]: 140618627247048
in [65]: id(d)
out[65]: 140618626985544
in [67]: c
out[67]: [[1, 2, 3, 5], [4, 5, 6]]
in [68]: d
out[68]: [[1, 2, 3, 5], [4, 5, 6]]
d只拷貝了一層,當a修改是,c和d都發生了改變
copy.copy()
在處理可變型別和不可變型別的時候結果不太一樣
in [69]: a=[1,2,3]
in [70]: b=[4,5,6]
in [71]: c=(a,b)
in [72]: c
out[72]: ([1, 2, 3], [4, 5, 6])
in [73]: d=copy.copy(c)
in [74]: id(c)
out[74]: 140618626859272
in [75]: id(d)
out[75]: 140618626859272
in [76]: e=copy.deepcopy(c)
in [77]: id(e)
out[77]: 140618626853000
in [79]: c
out[79]: ([1, 2, 3, 5], [4, 5, 6])
in [80]: d
out[80]: ([1, 2, 3, 5], [4, 5, 6])
in [81]: e
out[81]: ([1, 2, 3], [4, 5, 6])
d是c的copy.copy但是還是原來的id號,說明在處理不可變型別的時候,copy不是深拷貝 python 深拷貝 Python深拷貝和淺拷貝!
在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值 b alist,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變...
python深拷貝和淺拷貝
copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。比深拷貝更加節省記憶體 copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy公升 a 1,2,3,4,a b c b a c copy.copy a d copy.deepcop...
Python 深拷貝和淺拷貝
python深拷貝和淺拷貝的區別在於淺拷貝拷貝的是引用位址,深拷貝是複製了值 在淺拷貝時,拷貝出來的新物件的位址和原物件是不一樣的,但是新物件裡面的可變元素 如列表 的位址和原物件裡的可變元素的位址是相同的,也就是說淺拷貝它拷貝的是淺層次的資料結構 不可變元素 物件裡的可變元素作為深層次的資料結構並...