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

Python中copy和deepcopy的使用分析

 更新時間:2024年04月30日 10:40:00   作者:HuiSoul  
這篇文章主要介紹了Python中copy和deepcopy的使用,淺拷貝等于賦值,也可以通過copy實現(xiàn),copy僅拷貝對象本身,deepcopy是真正意義上的復制,深拷貝,被復制對象完全復制一遍作為獨立的新個體,新開辟一塊空間,需要詳細了解的朋友可以參考下

一、定義

淺拷貝:創(chuàng)建一個新的對象,只拷貝子對象的引用(內(nèi)部的內(nèi)存地址都不相同)。這意味著,如果原對象的子對象發(fā)生變化,拷貝后的對象也會受到影響。

深拷貝:創(chuàng)建一個新的對象,并遞歸地拷貝原對象的所有子對象(內(nèi)部以及外部的內(nèi)存地址都不相同)。這意味著,即使原對象的子對象發(fā)生變化,拷貝后的對象也不會受到影響。

二、區(qū)別

淺拷貝copy:

第一種情況:復制的 對象中無 復雜 子對象,原來值的改變并不會影響淺復制的值,同時淺復制的值改變也并不會影響原來的值。原來值的id值與淺復制原來的值不同。

第二種情況:復制的對象中有 復雜 子對象 (例如列表中的一個子元素是一個列表), 改變原來的值 中的復雜子對象的值 ,會影響淺復制的值。

深拷貝deepcopy:完全復制獨立,包括內(nèi)層列表和字典。

三、代碼分析深淺拷貝

淺拷貝僅拷貝對象本身

不可變類型的淺拷貝

如果復制不可變類型的數(shù)據(jù)(字符串、數(shù)值型、布爾值),和“=”賦值情況一樣,淺拷貝的對象和原數(shù)據(jù)對象是相同的內(nèi)存地址。

import copy
a = '哈哈'
b = a
c = copy.copy(a)
print('原數(shù)據(jù)的內(nèi)存地址:', id(a))
print('淺拷貝對象的內(nèi)存地址:', id(c))
print('=賦值對象的內(nèi)存地址:', id(c))
print('\n')

可變類型的淺拷貝

情況一:不存在嵌套類型的可變類型數(shù)據(jù)(列表、字典、集合)。列表本身的淺拷貝對象的地址

原對象的地址是不同的,因為列表是可變數(shù)據(jù)類型。因此改變原對象的值并不會影響淺復制的

值。

list1 = [1, 2, 3]
list2 = copy.copy(list1)
print('原數(shù)據(jù)的內(nèi)存地址:', id(list1))
print('淺拷貝的內(nèi)存地址:', id(list2))
# 測試,修改list1對象元素的值,不會改變list2的值(相互不影響)
list1[0] = 8
print(list1)
print(list2)

情況二:如果可變類型的數(shù)據(jù)中存在嵌套的結(jié)構(gòu)。淺拷貝只復制最外層的數(shù)據(jù),導致內(nèi)存地址發(fā)

變化,嵌套數(shù)據(jù)的內(nèi)存地址不會變。因此改變原對象中的嵌套對象的值,會影響淺復制的值。

list3 = [1, 2, [3, 4, 5]]
list4 = copy.copy(list3)
print('原數(shù)據(jù)的內(nèi)存地址:', id(list3))
print('淺拷貝的內(nèi)存地址:', id(list4))
print('\n')
print('原數(shù)據(jù)的內(nèi)存地址:', id(list3[0]))
print('淺拷貝的內(nèi)存地址:', id(list4[0]))
print('\n')
print('原數(shù)據(jù)的內(nèi)存地址:', id(list3[2]))
print('淺拷貝的內(nèi)存地址:', id(list4[2]))
# 測試
list3[2][0] = 8  # 改變list3嵌套列表的數(shù)值,淺拷貝的值也發(fā)生變化
print(list3)
print(list4)

深拷貝完全復制獨立

不可變類型的深拷貝

number = 5
number2 = copy.deepcopy(number)
print('原數(shù)據(jù)的內(nèi)存地址:', id(number))
print('深拷貝的內(nèi)存地址:', id(number2))

可變類型的深拷貝

原對象的值和復制后的值不相互影響。

情況一:不存在嵌套類型的可變類型數(shù)據(jù)(列表、字典、集合)

list1 = [1, 2, 3]
list2 = copy.copy(list1)
list33 = copy.deepcopy(list1)
print('原數(shù)據(jù)的內(nèi)存地址:', id(list1))
print('淺拷貝的內(nèi)存地址:', id(list2))
print('深拷貝的內(nèi)存地址:', id(list33))

情況二:如果可變類型的數(shù)據(jù)中存在嵌套的結(jié)構(gòu)

list3 = [1, 2, [3, 4, 5]]
list4 = copy.copy(list3)
list55 = copy.deepcopy(list3)
print('原數(shù)據(jù)的內(nèi)存地址:', id(list3))
print('淺拷貝的內(nèi)存地址:', id(list4))
print('深拷貝的內(nèi)存地址:', id(list55))
print('\n')
print('原數(shù)據(jù)的內(nèi)存地址:', id(list3[0]))
print('淺拷貝的內(nèi)存地址:', id(list4[0]))
print('深拷貝的內(nèi)存地址:', id(list55[0]))
print('\n')
print('原數(shù)據(jù)的內(nèi)存地址:', id(list3[2]))
print('淺拷貝的內(nèi)存地址:', id(list4[2]))
print('深拷貝的內(nèi)存地址:', id(list55[2]))

四、總結(jié)

只有淺拷貝拷貝有嵌套的可變類型時,改變原對象中嵌套內(nèi)的數(shù)據(jù),拷貝對象的值也會改變,即

原對象與拷貝對象的值相互影響。

到此這篇關(guān)于Python中copy和deepcopy的使用分析的文章就介紹到這了,更多相關(guān)Python copy deepcopy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python模擬實現(xiàn)全功能貸款計算器

    Python模擬實現(xiàn)全功能貸款計算器

    在個人理財中,貸款計算器是一款非常實用的工具,本文將教你如何使用Python編寫一個全功能的貸款計算器,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • 兩行Python代碼實現(xiàn)pdf轉(zhuǎn)word功能

    兩行Python代碼實現(xiàn)pdf轉(zhuǎn)word功能

    這篇文章主要為大家詳細介紹了如何利用兩行Python代碼就能實現(xiàn)pdf轉(zhuǎn)word功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-03-03
  • python基于moviepy實現(xiàn)音視頻剪輯

    python基于moviepy實現(xiàn)音視頻剪輯

    為了方便學習和復習,需要把一些長音視頻剪成一些小片段。本文介紹如何用Python實現(xiàn),把音視頻中的某一些片段剪出來。
    2021-06-06
  • Django+JS 實現(xiàn)點擊頭像即可更改頭像的方法示例

    Django+JS 實現(xiàn)點擊頭像即可更改頭像的方法示例

    這篇文章主要介紹了Django+JS 實現(xiàn)點擊頭像即可更改頭像的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Flask實現(xiàn)跨域請求的處理方法

    Flask實現(xiàn)跨域請求的處理方法

    這篇文章主要介紹了Flask實現(xiàn)跨域請求的處理方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • python求解漢諾塔游戲

    python求解漢諾塔游戲

    這篇文章主要為大家詳細介紹了python求解漢諾塔游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 對python指數(shù)、冪數(shù)擬合curve_fit詳解

    對python指數(shù)、冪數(shù)擬合curve_fit詳解

    今天小編就為大家分享一篇對python指數(shù)、冪數(shù)擬合curve_fit詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python調(diào)用系統(tǒng)底層API播放wav文件的方法

    Python調(diào)用系統(tǒng)底層API播放wav文件的方法

    這篇文章主要介紹了Python調(diào)用系統(tǒng)底層API播放wav文件的方法,涉及Python使用pywin32調(diào)用系統(tǒng)底層API讀取與播放wav文件的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python中的單下劃線和雙下劃線使用場景詳解

    Python中的單下劃線和雙下劃線使用場景詳解

    這篇文章主要介紹了Python中的單下劃線和雙下劃線使用場景詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • pytest使用parametrize將參數(shù)化變量傳遞到fixture

    pytest使用parametrize將參數(shù)化變量傳遞到fixture

    這篇文章主要為大家介紹了pytest使用parametrize將參數(shù)化變量傳遞到fixture的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

石楼县| 枣强县| 昆明市| 玉树县| 潮安县| 淄博市| 无棣县| SHOW| 大同市| 乡城县| 荔浦县| 河南省| 西安市| 威远县| 榕江县| 惠来县| 腾冲县| 永宁县| 璧山县| 丹寨县| 望城县| 孟村| 滁州市| 上思县| 邵阳县| 濮阳县| 广德县| 缙云县| 台安县| 温泉县| 陈巴尔虎旗| 雷州市| 改则县| 云南省| 偏关县| 峨眉山市| 双流县| 沧源| 苍溪县| 星座| 神农架林区|