Python深拷貝與淺拷貝引用_第1頁
Python深拷貝與淺拷貝引用_第2頁
Python深拷貝與淺拷貝引用_第3頁
Python深拷貝與淺拷貝引用_第4頁
Python深拷貝與淺拷貝引用_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第Python深拷貝與淺拷貝引用目錄(1)、存在父對象和子對象(2)、如果只存在父對象前言:

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

這里分兩種情況:

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

演示代碼如下:

importcopy

#調用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)建字典的內部值

print('Dict:'+str(Dict))

#輸出修改后的字典數(shù)據

print('Dict1_copy:'+str(Dict1_copy))

#輸出淺拷貝數(shù)據,數(shù)據被修改

print('Dict1_dcopy:'+str(Dict1_dcopy))

#輸出深拷貝的數(shù)據,數(shù)據未被修改

print('Dict2:'+str(Dict2))

#對象賦值,數(shù)據被修改

運行結果如下:

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

演示代碼如下:

importcopy

#調用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)建字典的內部值

print('Dict:'+str(Dict))

#輸出修改后的字典數(shù)據

print('Dict1_copy:'+str(Dict1_copy))

#淺拷貝,但結果與深拷貝相同

print('Dict1_dcopy:'+str(Dict1_dcopy))

#輸出深拷貝的數(shù)據,數(shù)據未被修改

print('Dict2:'+str(Dict2))

#對象賦值,數(shù)據被修改

運行結果如下:

由此可以看出,數(shù)據修改后,深拷貝一定不會被修改;淺拷貝如果有所謂父對象和子對象即嵌套,第二層可以被修改,不同于深拷貝,如果不存在嵌套,只有父對象,雖然本質上與深拷貝不同,但不會被修改;對象賦值,則是引用,跟著修改而改變。

下面舉個簡單例子,改變特定的數(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['

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論