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

Python的賦值、深拷貝與淺拷貝的區(qū)別詳解

 更新時間:2020年02月12日 15:20:51   作者:豬笨是念來過倒  
這篇文章主要介紹了Python的賦值、深拷貝與淺拷貝的區(qū)別,需要的朋友可以參考下

在python中,給一個對象賦值,實際上就是對象對內(nèi)存空間存儲的值的引用。當(dāng)我們把對象賦值給另一個變量的時候,這個變量并沒有拷貝這個對象,而只是拷貝了這個對象的引用而已。

一般情況下我們會通過三種方法來實現(xiàn)拷貝對象的引用。

Python直接賦值

直接賦值,默認(rèn)淺拷貝傳遞對象的引用而已,原始列表改變,被賦值的變量也會做相同的改變。其實就是對‘對象'的引用

示例:

>>> list_demo = [2, 4, 6]
>>> a = list_demo
>>> print(a)
[2, 4, 6]
>>> id(list_demo)
65006808
>>> id(a)
65006808
>>> list_demo.append(8)
>>> print(list_demo)
[2, 4, 6, 8]
>>> print(a)
[2, 4, 6, 8]
>>> id(list_demo)
65006808
>>> id(a)
65006808
>>>

通過 id() 函數(shù)我們可以得出,變量 list_demo 與 a 指向的都是同一個內(nèi)存空間地址,當(dāng)被賦值的 list_demo改變,被賦值的 a 同樣會做相同的改變。這種現(xiàn)象普遍存在于 Python 之中,這種賦值的方式實現(xiàn)了 “假裝” 拷貝,真實的情況還是兩個變量和同一個對象之間的引用關(guān)系。

Python淺拷貝

import copy 模塊的 copy.copy() 方法,該方法只拷貝父對象,沒有拷貝子對象。且淺拷貝是創(chuàng)建一塊新的內(nèi)存空間,但是內(nèi)存空間內(nèi)的元素的地址均是父對象元素的地址的拷貝。所以當(dāng)父對象內(nèi)部的子對象發(fā)生改變時,拷貝對象的內(nèi)部的子對象也會跟著改變。

示例:

>>> list_demo1 = [2, 4, 6, [8, 10]]
>>> a = list_demo1
>>> print(list_demo1)
[2, 4, 6, [8, 10]]
>>> print(a)
[2, 4, 6, [8, 10]]
>>>
>>>
>>> import copy
>>> b = copy.copy(list_demo1)
>>> id(list_demo1)
65103472
>>> id(b)
6011200
>>> list_demo1.append(12)
>>> print(list_demo1)
[2, 4, 6, [8, 10], 12]
>>> list_demo1[3]
[8, 10]
>>>
>>>
>>>
>>> list_demo1[3].append('hello')
>>> print(list_demo1)
[2, 4, 6, [8, 10, 'hello'], 12]
>>> print(b)
[2, 4, 6, [8, 10, 'hello']]
>>> list_demo1[3]
[8, 10, 'hello']
>>> b[3]
[8, 10, 'hello']
>>>
>>>
>>>
>>> id(list_demo1)
65103472
>>> id(b)
6011200
>>> id(list_demo1[3])
64679128
>>> id(b[3])
64679128
>>>

從上述代碼可以看出,在執(zhí)行淺拷貝的時候,淺拷貝實際上只拷貝引用,不拷貝內(nèi)容。同時,淺拷貝會針對父對象的子對象進(jìn)行判斷,當(dāng)父對象的子對象發(fā)生改變時,拷貝對象內(nèi)的子對象同時也跟著改變。

Python深拷貝

import copy 模塊的 copy.deepcopy() 方法,深拷貝與淺拷貝相反,就是徹徹底底的拷貝,完全的拷貝了父對象及子對象,同時指向一個新的內(nèi)存空間地址。此時,雖然源對象與拷貝對象的內(nèi)容是一樣的,但是不管針對誰進(jìn)行改動,另一個是絲毫不會受到影響的。

>>> list_demo2 = [2,3,4]

>>> c= copy.deepcopy(list_demo2)

>>> print(list_demo2)

[2, 3, 4]

>>> print(c)

[2, 3, 4]

>>> id(list_demo2)

6011440

>>> id(c)

6012440

>>> list_demo2.append(['a','b'])

>>> c.append([5,6])

>>> print(list_demo2)

[2, 3, 4, ['a', 'b']]

>>> print(c)

[2, 3, 4, [5, 6]]

>>> list_demo2[3].append('c')

>>> c[3].append(7)

>>> print(list_demo2)

[2, 3, 4, ['a', 'b', 'c']]

>>> print(c)

[2, 3, 4, [5, 6, 7]]

>>>

從上述代碼示例可以看出 list_demo2 與 c 相互獨(dú)立,無論 list_demo2 與 c本身進(jìn)行了修改,或者各自的子對象進(jìn)行了修改 都沒有互相影響。

總結(jié)

Python賦值

賦值的本質(zhì)就是將一個對象的內(nèi)存空間地址賦值給一個變量,讓變量指向該內(nèi)存空間地址。

Python淺拷貝

淺拷貝是拷貝了源對象的引用,并創(chuàng)建了一個新的內(nèi)存空間地址。但是引用的對象的子對象的地址仍然是源對象的,所以當(dāng)源對象的子對象發(fā)生改變時,拷貝對象內(nèi)的子對象同時也跟著改變。

Python深拷貝

深拷貝就是徹底的拷貝,完全的拷貝了父對象及子對象,同時指向一個新的內(nèi)存空間地址。源對象與拷貝對象之間的修改互不影響。

更多關(guān)于Python的賦值、深拷貝與淺拷貝的區(qū)別文章請查看下面的相關(guān)鏈接

相關(guān)文章

  • Python探索之SocketServer詳解

    Python探索之SocketServer詳解

    這篇文章主要介紹了Python探索之SocketServer詳解,小編覺得還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 一文詳解Python定時任務(wù)觸發(fā)

    一文詳解Python定時任務(wù)觸發(fā)

    這篇文章主要為大家詳細(xì)介紹了Python定時任務(wù)觸發(fā)的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2023-04-04
  • Python實現(xiàn)圖像的二進(jìn)制與base64互轉(zhuǎn)

    Python實現(xiàn)圖像的二進(jìn)制與base64互轉(zhuǎn)

    這篇文章主要為大家介紹了如何在Python中使用OpenCV從而實現(xiàn)圖像轉(zhuǎn)base64編碼、圖像轉(zhuǎn)二進(jìn)制編碼、二進(jìn)制轉(zhuǎn)圖像等功能,感興趣的可以跟上小編一起學(xué)習(xí)一下
    2022-03-03
  • numpy庫reshape用法詳解

    numpy庫reshape用法詳解

    這篇文章主要介紹了numpy庫reshape用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python使用pyppeteer進(jìn)行網(wǎng)頁截圖并發(fā)送機(jī)器人實例

    Python使用pyppeteer進(jìn)行網(wǎng)頁截圖并發(fā)送機(jī)器人實例

    這篇文章主要介紹了Python使用pyppeteer進(jìn)行網(wǎng)頁截圖并發(fā)送機(jī)器人實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • python的自變量選擇(所有子集回歸,后退法,逐步回歸)

    python的自變量選擇(所有子集回歸,后退法,逐步回歸)

    這篇文章主要介紹了python的自變量選擇(所有子集回歸,后退法,逐步回歸),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Python實現(xiàn)淘寶秒殺功能的示例代碼

    Python實現(xiàn)淘寶秒殺功能的示例代碼

    這篇文章主要介紹了Python實現(xiàn)淘寶秒殺功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python中通用的文本相似度計算方法詳解

    Python中通用的文本相似度計算方法詳解

    這篇文章主要為大家詳細(xì)介紹了三種Python中通用的文本相似度計算方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Python中安全地使用多進(jìn)程和多線程進(jìn)行數(shù)據(jù)共享

    Python中安全地使用多進(jìn)程和多線程進(jìn)行數(shù)據(jù)共享

    在并發(fā)編程中,有時多個線程或進(jìn)程需要訪問共享的數(shù)據(jù),因此我們需要一些機(jī)制來確保數(shù)據(jù)的安全訪問,本文將從多線程和多進(jìn)程兩個角度探討Python如何安全地實現(xiàn)數(shù)據(jù)共享
    2024-12-12
  • python與C互相調(diào)用的方法詳解

    python與C互相調(diào)用的方法詳解

    這篇文章主要給大家介紹了關(guān)于python與C互相調(diào)用方法的相關(guān)資料,文中通過示例代碼詳細(xì)介紹了動用的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07

最新評論

鄂托克前旗| 南开区| 黄浦区| 华蓥市| 芦山县| 专栏| 台北市| 金堂县| 孟村| 清涧县| 黔西县| 重庆市| 兴仁县| 车致| 桦甸市| 马尔康县| 潼南县| 南涧| 河南省| 塔城市| 泽州县| 沾益县| 南靖县| 榆社县| 绍兴市| 萝北县| 大同市| 进贤县| 荔波县| 花莲市| 临猗县| 阿克陶县| 溧阳市| 天津市| 台南市| 县级市| 太康县| 通榆县| 绥宁县| 正镶白旗| 和龙市|