python中copy 與 的區別

2021-09-08 04:22:09 字數 1470 閱讀 2457

當你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....