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

Python中copy和deepcopy的使用分析

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

一、定義

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

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

二、區(qū)別

淺拷貝copy:

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

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

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

三、代碼分析深淺拷貝

淺拷貝僅拷貝對象本身

不可變類型的淺拷貝

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

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

可變類型的淺拷貝

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

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

值。

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

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

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

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

深拷貝完全復制獨立

不可變類型的深拷貝

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

可變類型的深拷貝

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

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

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

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

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

四、總結

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

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

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

相關文章

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

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

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

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

    這篇文章主要為大家詳細介紹了如何利用兩行Python代碼就能實現(xiàn)pdf轉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調用系統(tǒng)底層API播放wav文件的方法

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

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

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

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

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

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

最新評論

安义县| 南陵县| 庐江县| 京山县| 舒兰市| 姚安县| 蒙城县| 双桥区| 杭锦旗| 延川县| 东乌珠穆沁旗| 盐边县| 通州市| 蒙山县| 且末县| 承德市| 太白县| 鄂温| 禹城市| 杭锦后旗| 九江市| 响水县| 沁源县| 麟游县| 竹溪县| 保亭| 石阡县| 巴林左旗| 休宁县| 门头沟区| 吴堡县| 怀远县| 天水市| 三穗县| 绍兴市| 彭山县| 宜兰市| 石景山区| 永修县| 菏泽市| 沂水县|