Python中的複製 淺拷貝與深拷貝

2021-08-28 16:54:56 字數 1041 閱讀 4020

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

==比較的是value,is比較的是id,意思是  「是否為同乙個物件」,條件比==要嚴格。

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

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

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

對於不可變物件,這三者作用一樣,均是使得新變數指向這個不可變物件,因此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也不同(不可變物件除外),乙個修改並不會影響另乙個,如下圖:

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

Python深複製淺複製or深拷貝淺拷貝

簡單點說 1.copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。2.copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很...

C 中淺拷貝與深拷貝(複製)

在有些時候,我們需要從資料庫讀取資料填充物件或從硬碟讀取檔案填充物件,但是這樣做相對耗時。這時候我們就想到了物件的拷貝。本文即以例項形式解析了c 淺拷貝和深拷貝的用法。c 中有兩種型別變數,一種 是值型別變數,一種是引用型別變數。對於前者,copy是屬於全盤複製 而對後 者,一般的copy只是淺co...

Python複製引用 淺拷貝 深拷貝

直接引用 a 1,2,3,4 b a 假設id a 指向a,則id b 也指向a,且值都為 1,2,3,4 a 4,5,6,7 a重新賦值,id指向b,此時b依舊指向a和 1,2,3,4 而a指向新位址b和 4,5,6,7 a 1,2,3,4 b a a 0 4a 1 5a 2 6a 3 7 通過索...