最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章讀懂Python賦值與拷貝

 更新時(shí)間:2018年04月19日 11:35:10   投稿:mrr  
本文給大家分享一篇文章帶領(lǐng)大家讀懂python賦值與拷貝的知識,感興趣的朋友一起看看吧

變量與賦值

在 Python 中,一切皆為對象,對象通過「變量名」引用,「變量名」更確切的叫法是「名字」,好比我們每個(gè)人都有自己的名字一樣,咱們通過名字來代指某個(gè)人,代碼里面通過名字來指代某個(gè)對象。

變量賦值就是給對象綁定一個(gè)名字,賦值并不會拷貝對象。好比我們出生的時(shí)候父母就要給我們?nèi)∫粋€(gè)名字一樣,給人取個(gè)綽號并不來多出一個(gè)人來,只是多一個(gè)名字罷了。

兩個(gè)對象做比較有兩種方式,分別是:is 與 == ,is比較的是兩個(gè)對象是否相同,通過對象的ID值可識別是否為相同對象,==比較的是兩個(gè)對象的值是否相等

>>> x1 = [1,2]
>>> x2 = [1,2]
>>> x1 is x2
False
>>> id(x1)
4338854088
>>> id(x2)
4338904392
>>> x1 == x2
True

x1 和 x2 的值雖然相同,但在內(nèi)存中是兩個(gè)獨(dú)立的不同的對象,占據(jù)不同的內(nèi)存空間,就好比兩個(gè)長得一樣的蘋果擺在桌子上,實(shí)則為兩個(gè)不同的物體。

>>> x3 = x2
>>> x3 is x2
True
>>> id(x3)
4338904392

前面說了,賦值是給對象綁定名字,這里我們只不過是給 x2 對應(yīng)的那個(gè)對象綁定了一個(gè)新的名字叫 x3,這就好比桌上放了一個(gè)蘋果,開始給它貼了一個(gè) x2 的標(biāo)簽,后來又給它添了一個(gè) x3 的標(biāo)簽,本質(zhì)上還是同一個(gè)蘋果,所以,x2 和 x3 所指的其實(shí)是同一個(gè)對象。

通過x2 修改對象時(shí),x3 也會跟著變化,因?yàn)楸举|(zhì)上它們是同一個(gè)對象,這就好比張三和小張是同一個(gè)人時(shí),給張三添衣服其實(shí)就是給小張?zhí)硪路?/p>

>>> x2.append(3)
>>> x2
[1, 2, 3]
>>> x3
[1, 2, 3]

但是,當(dāng)我給 x2 重新賦值時(shí),相當(dāng)于 x2 不再引用之前的對象,而引用新對象, x3 依然引用之前的對象。好比桌上一大蘋果開始貼了 x2 和 x3 兩個(gè)標(biāo)簽,給 x2 重新賦值就相當(dāng)于把 x2 標(biāo)簽貼到另外一個(gè)蘋果,但是 x3 還是貼在老蘋果身上。

>>> x2 = [3, 4]
>>> x3
[1, 2, 3]

對象拷貝

在業(yè)務(wù)中有時(shí)我們需要復(fù)制一個(gè)對象,但是又不想對原對象產(chǎn)生副作用,肯定不能通過賦值給一個(gè)新變量來解決(因?yàn)橘x值不是拷貝對象),所以 Python 專門提供了一種拷貝機(jī)制,基于原對象快速創(chuàng)建出一個(gè)含有相同值的對象。該功能由copy模塊提供。

拷貝又分為淺拷貝和深拷貝。

>>> s = [1,2,3]>>> sc = copy.copy(s) # 淺拷貝>>> sc[1, 2, 3]
>>> sdc = copy.deepcopy(s) # 深拷貝
>>> sdc
[1, 2, 3]

拷貝出來的對象只是值相同,實(shí)為不同的對象

>>> s == sc == sdc 
True
>>> s is sc 
False
>>> s is sdc
False

那么淺拷貝(shallow copy)與深拷貝(deep copy)有什么區(qū)別呢?

對于不可變對象,比如整數(shù)、字符串、元組、還有由這些不可變對象組成的集合對象,淺拷貝和深拷貝沒有區(qū)別,都是拷貝一個(gè)新對象

兩者的區(qū)別在于拷貝組合對象,比如列表中還有列表,字典中還有字典或者列表的情況時(shí),淺拷貝只拷貝了外面的殼子,里面的元素并沒有拷貝,而深拷貝則是把殼子和里面的元素都拷貝了一份新的。

來看一個(gè)例子:

>>> x = [2, 3]
>>> y = [7, 11]
>>> z = [x, y]
>>> a = copy.copy(z) # 淺拷貝
>>> a[0] is z[0]
True

拷貝出來的對象 a 中的元素引用的是 x 和 y,當(dāng)你修改 x 的值,a 也會跟著變。

>>> b = copy.deepcopy(z) # 深拷貝
>>> b[0] is z[0]
False

對于深拷貝,里面的元素也重新拷貝了一份,拷貝了一份與x和y等值的兩個(gè)元素,修改 x 和 y 的值,不會對 b 產(chǎn)生影響

對列表的切片拷貝z[:]或者是調(diào)用對象的copy方法list.copy()都屬于淺拷貝。對于自定義對象,我們還可以自己實(shí)現(xiàn)__copy__方法和__deepcopy__方法

總結(jié)

以上所述是小編給大家介紹的通過一篇文章讀懂Python賦值與拷貝,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 在Pytorch中使用Mask R-CNN進(jìn)行實(shí)例分割操作

    在Pytorch中使用Mask R-CNN進(jìn)行實(shí)例分割操作

    這篇文章主要介紹了在Pytorch中使用Mask R-CNN進(jìn)行實(shí)例分割操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • web自動(dòng)化測試Selenium點(diǎn)擊元素的常用方法

    web自動(dòng)化測試Selenium點(diǎn)擊元素的常用方法

    在Web自動(dòng)化測試中,Selenium提供多種點(diǎn)擊方法,常用的click()方法通過選中元素并觸發(fā)點(diǎn)擊事件,若click()方法不穩(wěn)定,可以采用JavaScript執(zhí)行點(diǎn)擊或使用ActionChains類模擬鼠標(biāo)點(diǎn)擊,需要的朋友可以參考下
    2024-09-09
  • pandas?修改列名的實(shí)現(xiàn)示例

    pandas?修改列名的實(shí)現(xiàn)示例

    本文主要介紹了pandas修改列名的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python裝飾器代碼詳解

    Python裝飾器代碼詳解

    這篇文章主要介紹了python 一篇文章搞懂裝飾器所有用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • Python的文本常量與字符串模板之string庫

    Python的文本常量與字符串模板之string庫

    這篇文章主要介紹了Python的文本常量與字符串模板string庫,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • python實(shí)現(xiàn)生成字符串大小寫字母和數(shù)字的各種組合

    python實(shí)現(xiàn)生成字符串大小寫字母和數(shù)字的各種組合

    這篇文章主要給大家介紹了關(guān)于python生成各種字符串的方法實(shí)例,給大家提供些思路,拋磚引玉,希望大家能夠喜歡
    2019-01-01
  • Opencv常見圖像格式Data Type及代碼實(shí)例

    Opencv常見圖像格式Data Type及代碼實(shí)例

    這篇文章主要介紹了Opencv常見圖像格式Data Type及代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)

    python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • pygame游戲之旅 創(chuàng)建游戲窗口界面

    pygame游戲之旅 創(chuàng)建游戲窗口界面

    這篇文章主要為大家詳細(xì)介紹了pygame游戲之旅,教大家如何創(chuàng)建游戲窗口界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 基于python實(shí)現(xiàn)從尾到頭打印鏈表

    基于python實(shí)現(xiàn)從尾到頭打印鏈表

    這篇文章主要介紹了基于python實(shí)現(xiàn)從尾到頭打印鏈表,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評論

湘潭县| 巴马| 古田县| 乃东县| 铅山县| 莫力| 宜兰市| 渭源县| 云安县| 奎屯市| 宜城市| 台山市| 石屏县| 大港区| 盐源县| 平武县| 天全县| 凤山县| 务川| 浪卡子县| 陕西省| 玉林市| 上犹县| 西充县| 景德镇市| 磴口县| 英吉沙县| 新野县| 阿克苏市| 宜兴市| 栾川县| 丹巴县| 白水县| 台北市| 明光市| 桂阳县| 广宗县| 务川| 灵武市| 栾城县| 岱山县|