国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python的賦值、淺拷貝、深拷貝

daryl / 1187人閱讀

摘要:淺拷貝對(duì)一個(gè)對(duì)象進(jìn)行拷貝。二不可變對(duì)象對(duì)于不可變對(duì)象,例如數(shù)字和字符串而言,賦值淺拷貝和深拷貝沒(méi)有區(qū)別,因?yàn)樗麄兊膶?duì)象引用永遠(yuǎn)指向同一個(gè)內(nèi)存地址。三可變對(duì)象對(duì)等數(shù)據(jù)類型而言,賦值淺拷貝和深拷貝,他們對(duì)內(nèi)存地址的變化是不同的。


在寫(xiě)dict數(shù)據(jù)類型時(shí),有提到過(guò)“賦值語(yǔ)句”與copy()函數(shù)。
其實(shí)說(shuō)到深淺拷貝,需要考慮具體的數(shù)據(jù)類型。一部分是不可變對(duì)象,如數(shù)字、字符串;另一部分是可變對(duì)象,如列表、字典等。


一、定義解釋

變量:一個(gè)系統(tǒng)表的元素,指向?qū)ο蟮倪B接空間。

對(duì)象:被分配的一塊內(nèi)存,存儲(chǔ)其實(shí)際的值。

引用:從變量到對(duì)象的指針。

不可變對(duì)象:一旦創(chuàng)建就不可以修改,如數(shù)字、字符串、元組。

可變對(duì)象:可以修改的對(duì)象,如列表、字典。

賦值:通過(guò)語(yǔ)句“=”實(shí)現(xiàn)。左邊是新建的變量,右邊可以是直接內(nèi)容,或者已存在的變量。是對(duì)象的引用,Python沒(méi)有拷貝該對(duì)象,只是拷貝了對(duì)象的引用,新變量指向源變量?jī)?nèi)存地址。

淺拷貝:對(duì)一個(gè)對(duì)象進(jìn)行拷貝。拷貝最外圍的對(duì)象本身,內(nèi)部的元素都只是拷貝了一個(gè)引用而已。即新創(chuàng)建了一個(gè)類型跟原對(duì)象一樣、內(nèi)容是原對(duì)象的引用。【淺拷貝對(duì)象是新的,對(duì)象的引用內(nèi)容是舊的。】
淺拷貝實(shí)現(xiàn)的幾種方式:(1)切片:[:];(2)工廠函數(shù),比如list()、dict();(3)使用copy()。

深拷貝:外圍和內(nèi)部元素都進(jìn)行了拷貝對(duì)象本身,而不是引用。即把對(duì)象復(fù)制一遍,并且該對(duì)象中引用的其他對(duì)象也復(fù)制。

二、不可變對(duì)象

對(duì)于不可變對(duì)象,例如數(shù)字和字符串而言,賦值(=)、淺拷貝(copy())和深拷貝(deepcopy())沒(méi)有區(qū)別,因?yàn)樗麄兊膶?duì)象引用永遠(yuǎn)指向同一個(gè)內(nèi)存地址。
通過(guò)例子演示:

>>> var_1 = 123
>>> id(var_1)            # 通過(guò)id()查看地址
1615552144
>>> var_2 = var_1
>>> id(var_2)
1615552144
>>>
>>> import copy        # 淺、深拷貝需要導(dǎo)入copy模塊
>>> var_3 = copy.copy(var_1)
>>> id(var_3)
1615552144
>>>
>>> var_4 = copy.deepcopy(var_1)
>>> id(var_4)
1615552144

你會(huì)發(fā)現(xiàn)var_1 ~ var_4 的id指向是一樣的。

三、可變對(duì)象

對(duì)list、dict等數(shù)據(jù)類型而言,賦值、淺拷貝和深拷貝,他們對(duì)內(nèi)存地址的變化是不同的。
賦值淺拷貝:值相等,地址相等;
copy淺拷貝:值相等,地址不相等;
deepcopy深拷貝:值相等,地址不相等;

例子一:
base[0]=’name’,是一個(gè)string,不可變對(duì)象;base[1]=[‘a(chǎn)ge’,18],是list,可變對(duì)象。
base_1、base_2均是base的淺拷貝,三者id()一樣。
當(dāng)對(duì)第一個(gè)string元素進(jìn)行不同的更改時(shí),發(fā)現(xiàn)id各不相同,不會(huì)互相影響,因?yàn)樽址ú豢勺儯┍伙@示的拷貝,當(dāng)修改后,新創(chuàng)建了一個(gè)字符對(duì)象。
而修改第二個(gè)list元素時(shí),不同的修改都只對(duì)最后一次修改生效,且互相影響,因?yàn)榈诙€(gè)元素列表只是簡(jiǎn)單的復(fù)制了其引用,修改任何一個(gè)淺拷貝,都會(huì)修改引用的內(nèi)容。

例子二:深拷貝
創(chuàng)建一個(gè)字典對(duì)象,并使用深拷貝創(chuàng)建一個(gè)新的對(duì)象。

>>>import copy
>>> var = {"a":1,"b":2,"c":[3,"abc"]}
>>> var1 = copy.deepcopy(var)
>>> id(var),id(var1)
(17616992, 15671136)            # 地址不相同
>>> id(var["c"]),id(var1["c"])
(15695144, 15695384)        
>>> id(var["c"][0]),id(var1["c"][0])
(1615550224, 1615550224)        # ‘c’元素的內(nèi)存地址是相同的
>>>
>>> var1["c"][0] = 4
>>> var
{"a": 1, "b": 2, "c": [3, "abc"]}
>>> var1
{"a": 1, "b": 2, "c": [4, "abc"]}
>>> id(var["c"][0]),id(var1["c"][0])
(1615550224, 1615550240)        # 對(duì)var1的修改沒(méi)有影響var       

? thanks for watching, keep on updating...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42322.html

相關(guān)文章

  • 探索php和python下對(duì)象拷貝拷貝

    摘要:對(duì)于而言,情況可能會(huì)有點(diǎn)小復(fù)雜,因?yàn)橐磺薪詾閷?duì)象,所以的普通賦值深拷貝和淺拷貝之間都是有細(xì)微區(qū)別的。二下的他們?cè)谥校瑢?duì)象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時(shí)值完全復(fù)制,完全的copy,對(duì)其中一個(gè)作出改變,不會(huì)影響另一個(gè) ??淺拷貝:賦值時(shí),引用賦值,相當(dāng)于取了一個(gè)別名。對(duì)其中一個(gè)修改,會(huì)影響另一個(gè) ??對(duì)于PHP而言,= 賦值時(shí),普通對(duì)象是深拷貝,但對(duì)對(duì)象來(lái)說(shuō)...

    shinezejian 評(píng)論0 收藏0
  • 探索php和python下對(duì)象拷貝拷貝

    摘要:對(duì)于而言,情況可能會(huì)有點(diǎn)小復(fù)雜,因?yàn)橐磺薪詾閷?duì)象,所以的普通賦值深拷貝和淺拷貝之間都是有細(xì)微區(qū)別的。二下的他們?cè)谥校瑢?duì)象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時(shí)值完全復(fù)制,完全的copy,對(duì)其中一個(gè)作出改變,不會(huì)影響另一個(gè) ??淺拷貝:賦值時(shí),引用賦值,相當(dāng)于取了一個(gè)別名。對(duì)其中一個(gè)修改,會(huì)影響另一個(gè) ??對(duì)于PHP而言,= 賦值時(shí),普通對(duì)象是深拷貝,但對(duì)對(duì)象來(lái)說(shuō)...

    wizChen 評(píng)論0 收藏0
  • 【編程語(yǔ)言】Python 參數(shù)傳遞、返回值、拷貝拷貝

    摘要:作者本文原載于,不允許轉(zhuǎn)載的參數(shù)傳遞的參數(shù)傳遞,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象數(shù)字字符元組等的參數(shù),更類似值傳遞對(duì)于可變對(duì)象列表字典等,更類似引用傳遞。 作者:LogM 本文原載于 https://segmentfault.com/u/logm/articles ,不允許轉(zhuǎn)載~ 1. Python 的參數(shù)傳遞 Python的參數(shù)傳遞,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)...

    PascalXie 評(píng)論0 收藏0
  • 操作之靈魂——拷貝

    摘要:原文地址首先需要搞清楚兩個(gè)概念賦值和引用,對(duì)于操作賦值操作程序先新建對(duì)象,然后將的值拷貝到中。切片操作屬于淺拷貝。 原文地址 首先需要搞清楚兩個(gè)概念:賦值和引用,對(duì)于操作 target = source: 賦值操作:程序先新建對(duì)象target,然后將source的值拷貝到target中。這里,target和source值相同,但是它們是兩個(gè)完全不同的對(duì)象。 引用操作:程序直接將tar...

    codercao 評(píng)論0 收藏0
  • python拷貝拷貝

    摘要:之前關(guān)于的作用域賦值參數(shù)傳遞,我們接連談了幾篇文章全菊變量和菊部變量關(guān)于函數(shù)參數(shù)傳遞,人都錯(cuò)了可變對(duì)象與不可變對(duì)象今天我們依然要就相關(guān)話題繼續(xù)下去。這是由于它們是不可變對(duì)象,不存在被修改的可能,所以拷貝和賦值是一樣的。 之前關(guān)于 Python 的作用域、賦值、參數(shù)傳遞,我們接連談了幾篇文章: 全菊變量和菊部變量 關(guān)于函數(shù)參數(shù)傳遞,80%人都錯(cuò)了 可變對(duì)象與不可變對(duì)象 今天我們依然要...

    ideaa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<