當你a=1000的時候a指向乙個新的類,內容為1000,而b仍然指向原來指向的內容,因為你沒有叫它指向其他內容。你使用=符號,使得a和b指向同乙個內容,而copy則是將b的內容複製後讓c指向這個拷貝的內容上了。看下面圖種執行的結果。b=a,使用a改變"age",b和a中的都改變了。而c採用copy,不受影響。
等會兒畫個圖補充上來就更容易理解了。
c從來沒有改變過。c中age的值一直保持在copy時獲得的那個10,只有a和b在後面age變成了11。
這個是個淺拷貝的事例,下面舉個深拷貝的事例,並結合淺拷貝,
c採用淺拷貝,d採用深拷貝,修改a中age的值,a和b的都改變了,c和d的沒有改變,但是修改a中「d」裡的list,則導致abc中list都改變,d中是深拷貝的則沒有改變。
詳細看最下補充的圖:
a =
b = a
c = a.copy()
from copy import deepcopy
d = deepcopy(a)
print "before:"
print "a:", a
print "b:", b
print "c:", c
print "d:", d
a["age"] = 11
print "after:"
print "a:", a
print "b:", b
print "c:", c
print "d:", d
#=>結果
before:
a: b:
c: d:
after:
a: b:
c: d:
ython中的物件之間賦值時是按引用傳遞的,如果需要拷貝物件,需要使用標準庫中的copy模組。
1. copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。
2. copy.deepcopy 深拷貝 拷貝物件及其子物件
乙個很好的例子:
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始物件
b = a #賦值,傳物件的引用
c = copy.copy(a) #物件拷貝,淺拷貝
d = copy.deepcopy(a) #物件拷貝,深拷貝
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
輸出結果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
copy 與 clone 的區別
clone 是傳遞乙個引用,相當於建立乙個指向元字串的乙個指標,而copy使賦值乙個物件.datatable dt new data table datatable dtcopy dt.copy datatable dtclone dt.clone datatable.clone 方法 這兩種方法都...
copy模組中的copy與deepcopy的區別
每空閒下來,就覺得以前寫的部落格很low.也許現在也很low 好吧就當公升級版的low吧 如果要了解copy與deepcopy的區別,就需要了解python的儲存機制 python在賦值會在記憶體裡開闢乙個空間來存放值這就叫 記憶體位址 同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍 ...
關於python深copy與淺copy的一點理解
一直對python深copy和淺copy似懂非懂的狀態,看了這篇文章,覺得自己懂了很多,給各位參考!出處 import copy a 1 不可變資料型別 copy a copy.copy a print id a id copy a 記憶體位址相同 a 1,2 可變資料型別 copy a copy....