欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python深拷貝與淺拷貝引用

 更新時間:2022年04月29日 10:14:53   作者:技術(shù)人小柒  
這篇文章主要介紹了Python深拷貝與淺拷貝引用,Python并沒有拷貝這個對象,而只是拷貝了這個對象的引用,下文具體的相關(guān)介紹需要的小伙伴可以參考一下

前言:

在Python中,對象賦值在本質(zhì)上是對對象的引用,當創(chuàng)建一個對象把它賦值給另一個變量的時候,Python并沒有拷貝這個對象,而只是拷貝了這個對象的引用,這里通過程序,借用Python中的copy模塊進一步理解深拷貝、淺拷貝和對象賦值有什么不同。

這里分兩種情況:

(1)、存在父對象和子對象

演示代碼如下:

import copy ? #調(diào)用copy模塊
Dict = {'animal':'cat','num':[10,20,30],'color':'pink'} #創(chuàng)建新字典
Dict1_copy = Dict.copy() ?#淺拷貝
Dict1_dcopy = copy.deepcopy(Dict) ?#深拷貝
Dict2 = Dict ? #直接賦值對象為淺拷貝
Dict['num'][1] = 66 ? #修改創(chuàng)建字典的內(nèi)部值
print('Dict:'+str(Dict)) ?#輸出修改后的字典數(shù)據(jù)
print('Dict1_copy:'+str(Dict1_copy)) ?#輸出淺拷貝數(shù)據(jù),數(shù)據(jù)被修改
print('Dict1_dcopy:'+str(Dict1_dcopy)) ?#輸出深拷貝的數(shù)據(jù),數(shù)據(jù)未被修改
print('Dict2:'+str(Dict2)) ?#對象賦值,數(shù)據(jù)被修改

運行結(jié)果如下:

(2)、如果只存在父對象

演示代碼如下:

import copy ? #調(diào)用copy模塊
Dict = {'animal':'cat','num':'10','color':'pink'} #創(chuàng)建新字典
Dict1_copy = Dict.copy() ?#淺拷貝
Dict1_dcopy = copy.deepcopy(Dict) ?#深拷貝
Dict2 = Dict ? #淺拷貝,直接賦值對象
Dict['animal'] = 'dog' ? #修改創(chuàng)建字典的內(nèi)部值
print('Dict:'+str(Dict)) ?#輸出修改后的字典數(shù)據(jù)
print('Dict1_copy:'+str(Dict1_copy)) ?#淺拷貝,但結(jié)果與深拷貝相同
print('Dict1_dcopy:'+str(Dict1_dcopy)) ?#輸出深拷貝的數(shù)據(jù),數(shù)據(jù)未被修改
print('Dict2:'+str(Dict2)) ?#對象賦值,數(shù)據(jù)被修改

運行結(jié)果如下:

由此可以看出,數(shù)據(jù)修改后,深拷貝一定不會被修改;淺拷貝如果有所謂父對象和子對象即嵌套,第二層可以被修改,不同于深拷貝,如果不存在嵌套,只有父對象,雖然本質(zhì)上與深拷貝不同,但不會被修改;對象賦值,則是引用,跟著修改而改變。
下面舉個簡單例子,改變特定的數(shù)值,對其它數(shù)值的影響:

Dict_A = { ? #建立新字典
? ? "A":11,
? ? "B":22,
? ? "C":[33,44,55]
}
Dict_B = Dict_A ? ?#賦值操作
Dict_C = Dict_A.copy() ? #淺拷貝
Dict_D = copy.deepcopy(Dict_A) ? #深拷貝
print('Dict_A:'+str(Dict_A))
print('Dict_B:'+str(Dict_B))
print('Dict_C:'+str(Dict_C))
print('Dict_D:'+str(Dict_D))?

#修改Dict_D中A
Dict_D['A'] = 99
print('Dict_A:'+str(Dict_A)) #變
print('Dict_B:'+str(Dict_B)) #變
print('Dict_C:'+str(Dict_C)) #不變
print('Dict_D:'+str(Dict_D)) #不變

#修改Dict_B中A
Dict_B['A'] = 77
print('Dict_A:'+str(Dict_A)) #變
print('Dict_B:'+str(Dict_B)) #變
print('Dict_C:'+str(Dict_C)) #不變
print('Dict_D:'+str(Dict_D)) #不變

#修改Dict_C中A
Dict_C['A'] = 88
print('Dict_A:'+str(Dict_A)) #不變
print('Dict_B:'+str(Dict_B)) #不變
print('Dict_C:'+str(Dict_C)) #變
print('Dict_D:'+str(Dict_D)) #不變

#修改Dict_D中A
Dict_D['A'] = 99
print('Dict_A:'+str(Dict_A)) #不變
print('Dict_B:'+str(Dict_B)) #不變
print('Dict_C:'+str(Dict_C)) #不變
print('Dict_D:'+str(Dict_D)) #變

#修改Dict_A中C的第二項
Dict_C['C'][1] = 100
print('Dict_A:'+str(Dict_A)) #變
print('Dict_B:'+str(Dict_B)) #變
print('Dict_C:'+str(Dict_C)) #變
print('Dict_D:'+str(Dict_D)) #不變

#修改Dict_B中C的第二項
Dict_C['C'][1] = 101
print('Dict_A:'+str(Dict_A)) #變
print('Dict_B:'+str(Dict_B)) #變
print('Dict_C:'+str(Dict_C)) #變
print('Dict_D:'+str(Dict_D)) #不變

#修改Dict_C中C的第二項
Dict_C['C'][1] = 102
print('Dict_A:'+str(Dict_A)) #變
print('Dict_B:'+str(Dict_B)) #變
print('Dict_C:'+str(Dict_C)) #變
print('Dict_D:'+str(Dict_D)) #不變

#修改Dict_D中C的第二項
Dict_D['C'][1] = 104
print('Dict_A:'+str(Dict_A)) #不變
print('Dict_B:'+str(Dict_B)) #不變
print('Dict_C:'+str(Dict_C)) #不變
print('Dict_D:'+str(Dict_D)) #變

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

相關(guān)文章

  • 在Python中使用元類的教程

    在Python中使用元類的教程

    這篇文章主要介紹了在Python中使用元類的教程,是Python當中的基礎(chǔ)知識,代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Python一行代碼實現(xiàn)快速排序的方法

    Python一行代碼實現(xiàn)快速排序的方法

    排序算法是在高考或中考中出現(xiàn)頻率最多的點,所以大家要掌握,今天小編給大家?guī)砹送ㄟ^Python一行代碼實現(xiàn)快速排序的方法,感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • Python數(shù)據(jù)分析?Numpy?的使用方法

    Python數(shù)據(jù)分析?Numpy?的使用方法

    這篇文章主要介紹了Python數(shù)據(jù)分析?Numpy?的使用方法,Numpy?是一個Python擴展庫,專門做科學計算,也是大部分Python科學計算庫的基礎(chǔ),關(guān)于其的使用方法,需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • 關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解

    關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解

    今天小編就為大家分享一篇關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的實戰(zhàn)記錄

    Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的實戰(zhàn)記錄

    近日在處理數(shù)據(jù)的時候發(fā)現(xiàn)有的文件為csv文件,Xiam 這篇文章主要給大家介紹了關(guān)于利用Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • python爬蟲之爬取百度音樂的實現(xiàn)方法

    python爬蟲之爬取百度音樂的實現(xiàn)方法

    今天小編就為大家分享一篇python爬蟲之爬取百度音樂的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 用Python定時發(fā)送天氣郵件

    用Python定時發(fā)送天氣郵件

    大家好,本篇文章主要講的是用Python定時發(fā)送天氣郵件,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Python圖像處理之圖片拼接和堆疊案例教程

    Python圖像處理之圖片拼接和堆疊案例教程

    這篇文章主要介紹了Python圖像處理之圖片拼接和堆疊案例教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Python多線程的退出控制實現(xiàn)

    Python多線程的退出控制實現(xiàn)

    這篇文章主要介紹了Python多線程的退出控制實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 淺談Python中的可迭代對象、迭代器、For循環(huán)工作機制、生成器

    淺談Python中的可迭代對象、迭代器、For循環(huán)工作機制、生成器

    這篇文章主要介紹了Python中的可迭代對象、迭代器、For循環(huán)工作機制、生成器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03

最新評論