Python中 「,淺複製和深複製的理解

2021-07-10 23:26:14 字數 1123 閱讀 9671

(1)賦值語句「=」的理解

在python中,物件的管理是通過物件引用計數器來實現的。如果某個物件的引用計數器變為0時,那麼該例項化物件將無法再被獲取,系統會自動將其消亡並**相應的記憶體,這也是記憶體管理機制。而賦值語句,其實就是將乙個物件的引用傳遞給某個變數,具體解釋看下面的例子。

>>>> x=[1,2,3]

>>> y=x

>>> x=

>>> y

[1, 2, 3]

>>>

在上述例子中,我建立了乙個列表物件,並將該物件的引用賦值給了x;接著,我又將該物件的引用通過x賦值給了y,這樣y其實就是對列表[1,2,3]的引用。而x=[ ]語句,建立了乙個空列表,並將引用賦值給x,此時x將不再指向列表[1,2,3]。

總結說來,賦值語句「=」伴隨著物件引用的建立和轉移。

(2)淺複製 copy()的理解

先看乙個例子:

>>> x=[1,[2,3]]

>>> y=x.copy()

>>> y

[1, [2, 3]]

>>> y[0]=2

>>> x

[1, [2, 3]]

>>> y

[2, [2, 3, 4]]

>>> x

[1, [2, 3, 4]]

淺複製會建立新的記憶體來儲存一些東西,但是它並不會將原對像進行徹底的複製。它會對字串、數值型別進行值的複製,但是對列表、字典來說,它僅僅複製引用。也就是說,淺複製僅僅複製表層的一些東西,對於子物件並不複製。所以,可以看到,當對y的子列表修改時,x也會跟著變化。

(3)深複製 deepcopy()的理解

>>> from copy import deepcopy

>>> x=[1,[2,3]]

>>> y=deepcopy(x)

>>> y

[1, [2, 3, 4]]

>>> x

[1, [2, 3]]

>>>

與上面的例子相對比,可以看出,深複製會將原物件徹底的複製,無論是表層還是子物件。需要說明的一點是,在使用deepcopy()時,將先將模組匯入。

python 深複製和淺複製

l1 1,2,3 4,5 l2 list l1 l1 1,2,3 4,5 99 l2 1,2,3 4,5 l1 1 remove 2 l1 1,3 4,5 99 l2 1,3 4,5 l2 1 11,12 l2 2 10,11 l1 1,3,11,12 4,5 99 l2 1,3,11,12 4,5...

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...

深複製和淺複製

以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...