久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python copy and deepcopy

 sven_ 2014-05-07

在Python中,無(wú)論你把對(duì)象做為參數(shù)傳遞,做為函數(shù)返回值,都是引用傳遞的,。

標(biāo)準(zhǔn)庫(kù)中的copy模塊提供了兩個(gè)方法來(lái)實(shí)現(xiàn)拷貝.一個(gè)方法是copy(shallow copy),它返回和參數(shù)包含內(nèi)容一樣的對(duì)象。

淺拷貝是指拷貝的只是原對(duì)象元素的引用,換句話說(shuō),,淺拷貝產(chǎn)生的對(duì)象本身是新的,,但是它的內(nèi)容不是新的,只是對(duì)原對(duì)象的一個(gè)引用。這里有個(gè)例子


>>> a=[[1, 2], 3, 4]
>>> b = a[:] #利用切片完成一次淺拷貝
>>> id(a)
3084416588L
>>> id(b)
3084418156L
>>> a[0][0] = 5
>>> a
[[5, 2], 3, 4]
>>> b
[[5, 2], 3, 4]


可以看到,,淺拷貝生產(chǎn)了一個(gè)新的對(duì)象bList,但是aList的內(nèi)容確實(shí)對(duì)aList的引用,所以但改變aList中值的時(shí)候,,bList的值也跟著變化了,。

但是有點(diǎn)需要特別提醒的,如果對(duì)象本身是不可變的,,那么淺拷貝時(shí)也會(huì)產(chǎn)生兩個(gè)值,,見(jiàn)這個(gè)例子:


>>> a = [1, 2]
>>> b = a[:]
>>> b
[1, 2]
>>> a
[1, 2]
>>> a[1]=1
>>> a
[1, 1]
>>> b
[1, 2]

為什么b的第二個(gè)元素沒(méi)有變成1呢?因?yàn)閿?shù)字在python中是不可變類(lèi)型??!

這個(gè)順便回顧下Python標(biāo)準(zhǔn)類(lèi)型的分類(lèi):
可變類(lèi)型: 列表,字典
不可變類(lèi)型:數(shù)字,,字符串,,元組


 

如果你希望復(fù)制一個(gè)容器對(duì)象,以及它里面的所有元素(包含元素的子元素),使用copy.deepcopy,這個(gè)方法會(huì)消耗一些時(shí)間和空間,不過(guò),如果你需要完全復(fù)制,這是唯一的方法.



對(duì)于一般的淺拷貝,使用copy.copy就可以了,當(dāng)然,你需要了解你要拷貝的對(duì)象.要復(fù)制列表L,使用list(L),要復(fù)制一個(gè)字典d,使用dict(d),要復(fù)制一個(gè)集合s,使用set(s),這樣,我們總結(jié)出一個(gè)規(guī)律,如果你要復(fù)制一個(gè)對(duì)象o,它屬于內(nèi)建的類(lèi)型t,那么你可以使用t(o)來(lái) 獲得一個(gè)拷貝.dict也提供了一個(gè)復(fù)制版本,dict.copy,這個(gè)和dict(d)是一樣,我推薦你使用后者,這個(gè)使得代碼更一致,而且還少幾個(gè)字符.

注意你不用復(fù)制不可修改對(duì)象(string,數(shù)字,元組),因?yàn)槟悴挥脫?dān)心修改它們.如果你想嘗試一下復(fù)制,依然會(huì)得到原來(lái)的.雖然無(wú)傷大雅,不過(guò)真的浪費(fèi)盡力.




 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多