在下是個編程愛好者,最近將魔爪伸向了Python編程。。。。。遇到copy和deepcopy感到很困惑,現(xiàn)在針對這兩個方法進(jìn)行區(qū)分,一種是淺復(fù)制(copy),一種是深度復(fù)制(deepcopy)。
首先說一下deepcopy,所謂的深度復(fù)制,在這里我理解的是完全復(fù)制然后變成一個新的對象,復(fù)制的對象和被復(fù)制的對象沒有任何關(guān)系,彼此之間無論怎么改變都相互不影響。
然后說一下copy,在這里我分為兩類來說,一種是字典數(shù)據(jù)類型的copy函數(shù),一種是copy包的copy函數(shù)。
一、字典數(shù)據(jù)類型的copy函數(shù),當(dāng)簡單的值替換的時候,原始字典和復(fù)制過來的字典之間互不影響,但是當(dāng)添加,刪除等修改操作的時候,兩者之間會相互影響。
(1)值替換
import copy d = { 'name' : ['An','Assan'] } c = d.copy() dc = copy.deepcopy(d) d['name'] = ['an'] print c print d print dc 結(jié)果如下:
{'name': ['An', 'Assan']} {'name': ['an']} {'name': ['An', 'Assan']} (2)值修改
import copy d = { 'name' : ['An','Assan'] } c = d.copy() dc = copy.deepcopy(d) d['name'].append('shu') print c print d print dc 結(jié)果如下:
{'name': ['An', 'Assan', 'shu']} {'name': ['An', 'Assan', 'shu']} {'name': ['An', 'Assan']} 二、copy包中的copy函數(shù),無論是修改還是值替換兩者之間都互不影響。
import copy seq = [1,2,3] seq1 = seq seq2 = copy.copy(seq) seq3 = copy.deepcopy(seq) seq.append(4) seq2[2] = 5 print seq,seq1,seq2,seq3
結(jié)果如下:
[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 5] [1, 2, 3]
在上面代碼中,sql1 = seq其實(shí)是同是指向同一個對象地址,使用的同一個對象引用。
總結(jié)
以上就是本文關(guān)于淺談python/115112.html">python中copy和deepcopy中的區(qū)別的全部內(nèi)容,希望對大家有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選