程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python中的復制、淺拷貝與深拷貝

編輯:Python

1.對象的三要素

id、type以及value,id唯一標識一個對象,相當於地址,id一樣,說明就是同一個東西。type和value就是字面意思。

2.==和is

==比較的是value,is比較的是id,意思是  “是否為同一個對象”,條件比==要嚴格。

3.可變對象/不可變對象

Python一切均是對象,不可變對象有:數字、字符串、元組等,為什叫不可變對象呢?難道我不能為一個整形變量重新賦值?相信一定也有這種疑問,下面看個例子:

看的出來,為a重新賦值,其實是令a指向了另一個對象,字符串,元組也一個道理,對指向此類對象的變量做修改,只是使其指向了另外一個對象。

而對於可變對象,如list,如下圖所示,修改後id不變,還是這個東西

4.賦值、淺拷貝與深拷貝

對於不可變對象,這三者作用一樣,均是使得新變量指向這個不可變對象,因此id都是一樣的:

對於可變對象,賦值是最簡單省事的,如b=a,意思是直接使得a指向b代表的對象,兩者id一樣,指向同一個對象,一個修改,另一個也隨之變化:

而淺拷貝copy.copy則是另外新建出一個對象,如a=[1,2,[1,2]],b=copy.copy(a),a與b的id不同,但裡面內容所指還是相同,比如a[2]和b[2]仍然指向同一個對象,修改其中一個,另外一個也會變:

深拷貝則是完全復制一份,還是上面那個例子,深拷貝後,非但a和b的id不同。連裡面的對象id也不同(不可變對象除外),一個修改並不會影響另一個,如下圖:

以上為個人拙見,如有不對,還望指出。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved