Python 中的 copy()和deepcopy()
:
在處理列表和字典時(shí),盡管傳遞引用常常是最方便的方法,但如果函數(shù)修改了傳入的列表或字典,可能不希望這些變動(dòng)影響原來的列表或字典。要做到這一點(diǎn),Python
提供了名為copy
的模塊,其中包含copy()
和deepcopy()
函數(shù)。
第一個(gè)函數(shù)copy.copy()
,可以用來復(fù)制列表或字典這樣的可變值,而不是只復(fù)制引用。
兩者的區(qū)別是copy.copy()
是這復(fù)制了列表或字典的值,但是引用還是同一個(gè)。而copy.deepcopy()
是產(chǎn)生一個(gè)新的引用使新的變量和被復(fù)制變量引用不同。
看下面的示例代碼:
1、copy.copy()
示例代碼:
import copy spam = ['A','B','C','D',[1,2,3,4]] cheese = copy.copy(spam) spam[0] = 42 print(spam)
運(yùn)行結(jié)果:
[42,'B','C','D',[1,2,3,4]]
根據(jù)結(jié)果可以看出,使用copy.copy()
函數(shù)時(shí),cheese
是復(fù)制了spam
列表引用,對spam
列表操作時(shí),也會(huì)對cheese
列表產(chǎn)生影響。這也被稱為淺copy
。
2、deepcopy.copy()
示例代碼:
#Python學(xué)習(xí)交流群:778463939 import copy spam = ['A','B','C','D',[1,2,3,4]] cheese = copy.deepcopy(spam)#不同部分 spam[0] = 42 print(spam)
運(yùn)行結(jié)果:
[42,'B','C','D',[1,2,3,4]]
根據(jù)結(jié)果可以看出,使用deepcopy()
時(shí),對spam
列表操作不會(huì)對cheese
列表產(chǎn)生影響,這是因?yàn)?code>deepcopy()是產(chǎn)生一個(gè)新的引用,這樣spam
和cheese
是兩個(gè)不同的引用所以在對spam
列表操作時(shí)不會(huì)對cheese列表產(chǎn)生影響。
到此這篇關(guān)于Python 中的 copy()和deepcopy()的文章就介紹到這了,更多相關(guān)Python copy()和deepcopy()內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。