圖解Python中的淺拷貝和深拷貝
Python淺拷貝和深拷貝
最直觀的理解就是:
1.深拷貝,拷貝的程度深,自己新開辟了一塊內(nèi)存,將被拷貝內(nèi)容全部拷貝過來了;
2.淺拷貝,拷貝的程度淺,只拷貝原數(shù)據(jù)的首地址,然后通過原數(shù)據(jù)的首地址,去獲取內(nèi)容。
兩者的優(yōu)缺點(diǎn)對(duì)比
(1)深拷貝拷貝程度高,將原數(shù)據(jù)復(fù)制到新的內(nèi)存空間中。改變拷貝后的內(nèi)容不影響原數(shù)據(jù)內(nèi)容。但是深拷貝耗時(shí)長(zhǎng),且占用內(nèi)存空間。
(2)淺拷貝拷貝程度低,只復(fù)制原數(shù)據(jù)的地址。其實(shí)是將副本的地址指向原數(shù)據(jù)地址。修改副本內(nèi)容,是通過當(dāng)前地址指向原數(shù)據(jù)地址,去修改。所以修改副本內(nèi)容會(huì)影響到原數(shù)據(jù)內(nèi)容。但是淺拷貝耗時(shí)短,占用內(nèi)存空間少。
淺拷貝
有一層數(shù)據(jù)類型,且數(shù)據(jù)類型時(shí)可變數(shù)據(jù)類型,例如:列表、字典
有一層數(shù)據(jù)類型,且數(shù)據(jù)類型時(shí)不可變數(shù)據(jù)類型,例如:元組、字符串
有兩層數(shù)據(jù)類型,外層為可變數(shù)據(jù)類型,內(nèi)層為可變數(shù)據(jù)類型
有兩層數(shù)據(jù)類型,外層為可變數(shù)據(jù)類型,內(nèi)層為不可變數(shù)據(jù)類型
有兩層數(shù)據(jù)類型,外層為不可變數(shù)據(jù)類型,內(nèi)層為不可變數(shù)據(jù)類型
有兩層數(shù)據(jù)類型,外層為不可變數(shù)據(jù)類型,內(nèi)層為可變數(shù)據(jù)類型
深拷貝
有一層數(shù)據(jù)類型,且數(shù)據(jù)類型時(shí)可變數(shù)據(jù)類型,例如:列表、字典
有一層數(shù)據(jù)類型,且數(shù)據(jù)類型時(shí)不可變數(shù)據(jù)類型,例如:元組、字符串
有兩層數(shù)據(jù)類型,外層為可變數(shù)據(jù)類型,內(nèi)層為可變數(shù)據(jù)類型
有兩層數(shù)據(jù)類型,外層為可變數(shù)據(jù)類型,內(nèi)層為不可變數(shù)據(jù)類型
有兩層數(shù)據(jù)類型,外層為不可變數(shù)據(jù)類型,內(nèi)層為不可變數(shù)據(jù)類型
有兩層數(shù)據(jù)類型,外層為不可變數(shù)據(jù)類型,內(nèi)層為可變數(shù)據(jù)類型
由實(shí)驗(yàn)結(jié)果總結(jié)得:
當(dāng)內(nèi)層為可變數(shù)據(jù)類型時(shí),深拷貝后內(nèi)層外層地址均發(fā)生改變。當(dāng)內(nèi)層為不可變數(shù)據(jù)類型時(shí),外層不管是可變還是不可變數(shù)據(jù)類型,使用深拷貝,都不會(huì)改變內(nèi)層地址,只會(huì)在外層為可變數(shù)據(jù)類型時(shí),改變外層地址。
使用淺拷貝是只能在外層數(shù)據(jù)類型為可變數(shù)據(jù)類型時(shí),才能改變外層地址。而內(nèi)層地址,無論是否為可變數(shù)據(jù)類型還是不可變數(shù)據(jù)類型,使用淺拷貝都不會(huì)改變內(nèi)層數(shù)據(jù)類型地址。
到此這篇關(guān)于圖解Python中的淺拷貝和深拷貝的文章就介紹到這了,更多相關(guān)Python淺拷貝和深拷貝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用MapReduce編程模型統(tǒng)計(jì)銷量
MapReduce是面向大數(shù)據(jù)并行處理的計(jì)算模型、框架和平臺(tái),是一種計(jì)算引擎,可以把我們對(duì)大批量數(shù)據(jù)的計(jì)算通過抽象成map與reduce兩個(gè)子任務(wù)進(jìn)行計(jì)算從而更快的得到想要的結(jié)果2022-04-04python實(shí)現(xiàn)微信每日一句自動(dòng)發(fā)送給喜歡的人
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信每日一句自動(dòng)發(fā)送給喜歡的人,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Python3進(jìn)制之間的轉(zhuǎn)換代碼實(shí)例
這篇文章主要介紹了Python3進(jìn)制之間的轉(zhuǎn)換代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Django項(xiàng)目的初步創(chuàng)建與簡(jiǎn)單配置
本文主要介紹了Django項(xiàng)目的初步創(chuàng)建與簡(jiǎn)單配置,詳細(xì)介紹了如何安裝和配置Django,包括創(chuàng)建項(xiàng)目、數(shù)據(jù)庫(kù)配置、路由等,通過本文可以了解如何使用Django創(chuàng)建自己的Web應(yīng)用程序2023-09-09