久久久精品2019免费观看_亚洲国产精品成人久久久_69国产成人综合久久精品91_国产精品久久精品视

Python 淺拷貝是什么

這章我們來講深淺拷貝的淺拷貝,

我先定義一個列表,l=[‘張大仙’,’徐鳳年’,[‘李淳罡’,’鄧太阿’]]。

內(nèi)存里的結(jié)構(gòu)就是這樣的,我已經(jīng)提前畫好圖了。

先是在對去里面申請列表的內(nèi)存空間,地址是001然后里面放的是索引對應(yīng)值的內(nèi)存地址,0號索引對應(yīng)的內(nèi)存地址就是‘張大仙’這個值的內(nèi)存地址。1號縮影對應(yīng)的就是‘徐鳳年’的內(nèi)存地址。三號索引對應(yīng)的又是一個列表的內(nèi)存地址,然后字列表里面又存了兩個元素,列表里面的0號索引對應(yīng)‘李淳罡’的內(nèi)存地址,1號索引對應(yīng)‘鄧太阿’的內(nèi)存地址。

現(xiàn)在我寫一個l2=l1。

由于變量名對應(yīng)的是內(nèi)存地址,所以我這里把l1賦值給l2就意味著把l1的內(nèi)存紙質(zhì)給了l2。這是我們前面的章節(jié)講過的,看過我前面所講的應(yīng)該是能理解的吧。

然后在內(nèi)存里是這樣顯示的。

兩個變量名同時只想了同一個內(nèi)存地址,也就是l1和l2是無法分割開的,只要做了一個改動另外一個也會跟著改。

現(xiàn)在我把l1的0號索引改成‘張麻子’,這時候l2也會跟著改對吧,然后我們來打印一下l1和l2。結(jié)果就都變成了‘張?zhí)箍恕?/p>

但是假如我現(xiàn)在有一個需求,我現(xiàn)在就想定義一個l2,他是l1的拷貝版本,但是我想把兩者完全分割開,l2修改之后不能影響我l1原有的數(shù)據(jù)。于是給予有了深淺拷貝的概念。

首先來看淺拷貝,我直接寫一個l1.copy,將它賦值給l3。Pycharm也給我們提示了copy這個功能。

這個就是淺拷貝,然后我們再來打印一下l3看看,結(jié)果就是和l1一樣的

現(xiàn)在我們來打印下一下l1的id和l3的id,結(jié)果這兩個id不一樣。說明這是兩塊不同的內(nèi)存地址對吧。但是它們連這個和的內(nèi)容又是一樣的。

這時候我們就要來驗證一下這兩個列表裝的內(nèi)容。先來打印一下l1的0號索引的id,1號索引的id和2號索引的id。再打印下l3的0號索引的id,1號索引的id和2號索引的id。

這兩個列表的id不一樣,但是它們里面存的數(shù)據(jù)的id確是一樣的。說明了我們拷貝的這個列表只是拷貝了這個容器本身產(chǎn)生了一個新的容器,但是容器里面的數(shù)據(jù)還是原來的數(shù)據(jù)。

我們來看圖,首先是l3指向了一個新的內(nèi)存地址,然后里面存的內(nèi)存地址和上面是一樣的對吧,都指向了同樣的內(nèi)存地址。這樣拷貝完了之后,我們發(fā)現(xiàn)最后只想到還是同樣的內(nèi)存地址,唯一變了的就只有列表這個容器本身的內(nèi)存地址。

我們來改一下l3的內(nèi)容,還是把l3的第一個元素改成‘張?zhí)箍恕?,第二個元素改成‘徐曉’,第三個元素這個列表的第一個元素也改一下,改成‘劍九黃’,第二個元素改成‘王仙芝’。然后我們再來打印一下l1和l3。

l3的所有內(nèi)容確實被我們改掉了,但是l1只有它的字列表改變了,這是因為淺拷貝只會把原列表的第一層里面的索引和內(nèi)存地址一模一樣拷貝到一個新的內(nèi)存空間里面,由于這個列表的第一和第二個元素是字符串,是不可變類型,所以當(dāng)我們改l3的時候又會申請新的內(nèi)存空間用來存我們改的‘張?zhí)箍恕汀鞎浴?。但是原列表紙箱的還是原來的內(nèi)存地址,由于列表是可變類型,當(dāng)我們改字列表的時候,他的內(nèi)存地址是不會變的

所以l1和l3里面存的?;鬯略瓉淼淖恿斜淼膬?nèi)存地址,但是這個子列表的數(shù)據(jù)卻被我們改掉了,所以就會出現(xiàn)打印的這種情況。只有子列表的數(shù)據(jù)被改了。

這就叫淺拷貝,它會把原列表的第一層索引和內(nèi)存地址,完全拷貝一份給新列表,如果原列表存的全部都是不可變類型,淺拷貝就可以正常使用,新列表改動之后全都是產(chǎn)生新的值,根本不會影響到原列表。

但是原列表一旦包含了可變可類型,淺拷貝的新列表就沒辦法和原列表完全分開了,如果想要把新列表的所有內(nèi)容,不管是可變類型還是不可變類型都完全區(qū)分開就要用到下一章講的深拷貝了。

未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python 淺拷貝是什么

贊 (0) 打賞

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

微信掃一掃打賞