溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python如何實(shí)現(xiàn)深淺拷貝

發(fā)布時(shí)間:2021-10-18 15:42:07 來(lái)源:億速云 閱讀:190 作者:小新 欄目:編程語(yǔ)言

這篇文章主要為大家展示了“Python如何實(shí)現(xiàn)深淺拷貝”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python如何實(shí)現(xiàn)深淺拷貝”這篇文章吧。

一、淺拷貝

淺拷貝,記住一點(diǎn),淺拷貝不管多復(fù)雜,只copy第一層,看圖說(shuō)話。
1、定義源列表list_s,列表list_c,并進(jìn)行拷貝操作,查看兩列表的值相等,如下圖所示。

Python如何實(shí)現(xiàn)深淺拷貝
2、現(xiàn)在源列表list_s數(shù)據(jù)更改,增加數(shù)值list_s.append(3),list_s數(shù)值改變,而列表list_c的值不變,如下圖所示。
Python如何實(shí)現(xiàn)深淺拷貝
3、現(xiàn)在list_c數(shù)據(jù)更改,增加數(shù)值list_c.append(4),list_c數(shù)值改變,而源列表list_s的數(shù)值保持不變,如下圖所示。
Python如何實(shí)現(xiàn)深淺拷貝
由以上三步操作可以看出,源list_s里面嵌套了[3,4]列表,對(duì)源list_s進(jìn)行追加3,發(fā)現(xiàn)list_s數(shù)值改變,而list_c數(shù)值沒(méi)有改變,而對(duì)list_c追加4,發(fā)現(xiàn)list_s數(shù)值未改變,而list_c數(shù)值改變了,那么對(duì)源list_s里面的[3,4]進(jìn)行改變,看list_s和list_c數(shù)值會(huì)發(fā)生怎樣的變化,繼續(xù)往下看。
4、修改源list_s里面的[3,4]值,增加5,變成[3,4,5],發(fā)現(xiàn)源list_s改變,list_c數(shù)值也發(fā)生改變,而且,兩者更改的地方是一樣的,都變成了[3,4,5],如下圖所示。
Python如何實(shí)現(xiàn)深淺拷貝
5、那么修改list_c里面的[3,4,5]值,增加6,變成[3,4,5,6],發(fā)現(xiàn)list_c改變,源list_s數(shù)值也發(fā)生改變,而且,兩者更改的地方是一樣的[3,4,5,6],如下圖所示。
Python如何實(shí)現(xiàn)深淺拷貝
由以上兩步操作可以看出,不管是源list_s,還是list_c改變列表中嵌套的列表[3,4]的值時(shí),源list_s和list_c都會(huì)發(fā)生改變,而且變化一樣。
從內(nèi)存地址來(lái)看,如下圖所示。
Python如何實(shí)現(xiàn)深淺拷貝

綠色的為追加的內(nèi)容,可以看出,進(jìn)行淺拷貝之后,列表中嵌套的列表[3,4]指向的內(nèi)容以及地址,并未發(fā)生改變,所以,不論[3,4]發(fā)生什么樣的改變,llist_s和list_c都會(huì)發(fā)生同樣的改變,而第一層的列表,list_s和list_c都是相互獨(dú)立的,兩者發(fā)生改變不會(huì)影響對(duì)方。

綜上所述,淺拷貝只拷貝第一層,深層次的數(shù)據(jù)改變都會(huì)影響其他.

二、深拷貝

搞明白淺拷貝之后,深拷貝就很好理解了,深拷貝就是在內(nèi)存中重新開(kāi)辟一塊空間,不管數(shù)據(jù)結(jié)構(gòu)有多復(fù)雜,只要數(shù)據(jù)發(fā)生改變,就重新開(kāi)辟一塊內(nèi)存空間把內(nèi)容復(fù)制下來(lái),直到最后一層,通俗點(diǎn)講就是,深拷貝就是重新定義一個(gè)變量,于之前的沒(méi)有半毛錢(qián)關(guān)系,所以更改里面的內(nèi)容,原來(lái)的并不會(huì)發(fā)生改變。舉例說(shuō)明,如下圖所示。
Python如何實(shí)現(xiàn)深淺拷貝
定義list_s=[1,2,[3,4]],而list_c進(jìn)行深拷貝,初始值,兩者一樣,然后對(duì)list_s追加3,對(duì)list_c中的列中中的列表[3,4]追加5,發(fā)現(xiàn),list_s為[1,2,[3,4],3], list_c為[1,2,[3,4,5]]彼此的變化并沒(méi)有影響對(duì)方。

以上是“Python如何實(shí)現(xiàn)深淺拷貝”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI