python深複製與淺複製區別

2021-07-01 22:30:23 字數 847 閱讀 6481

1. copy.copy() 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。

2. copy.deepcopy() 深拷貝 拷貝物件及其子物件

由於在python中物件之間賦值只是引用的傳遞,即多個物件指向同乙個位址,如

a=[1,2,3]

b=a此時a與b是指向同乙個記憶體位址的,即儲存[1,2,3]的記憶體位址;

那麼如果對b進行改動,則勢必會將a的值一併修改,那麼此時就必須使用複製來copy乙個新的物件,如

a=[1,2,3]

b=copy.copy(a)或者b=copy.deepcopy(a),此時,a與b指向的是不同的記憶體位址,修改b不會影響到a.

然而深複製和淺複製有什麼區別呢?

如果僅僅是一級列表深複製和淺複製並無區別,然後對於list的巢狀則不同,如下:

a=[1,2,3,4,['a','b','c'],5]對於這樣乙個序列,使用深拷貝和淺拷貝來分別驗證;

b=copy.copy(a)

c=copy.deepcopy(a)

結果為:

b=[1,2,3,4,[a,b,c],5]

c=[1,2,3,4,[a,b,c],5]

此時結果為:

a=[1,2,3,4,['a','b','c','d'],5,6]

b=[1,2,3,4,['a','b','c','d'],5]

c=[1,2,3,4,['

a','

b','

c'],5]

1.原因在於深拷貝會將物件的父物件和子物件一起拷貝,是完整的拷貝;

2.而淺拷貝只是拷貝了父物件,對於子物件,b[4]和a[4]依然指向同乙個位址,是引用,而非拷貝,故會被影響;

淺複製 與 深複製的區別

淺複製 copy 只複製指向物件的指標,而不複製引用物件本身,通過物件的指標來訪問這個物件,只複製位址.深層複製 mutablecopy 複製引用物件本身,在建立乙個物件,意思就是有個a物件,複製一分後得到a copy物件後 對於淺複製來說,a和a copy 指向的是同一記憶體資源,複製的只不過是乙...

淺複製與深複製

舉個複製 的例子 function clone p,s for var prop in p return s var a var b clone a,b b.hobby 1 reading b.hobby 1 reading c.hobby 1 reading 由上面的例子可以看出,當執行淺複製時,...

深複製與淺複製

2者主要區別 是否為成員變數分配新記憶體空間 複製建構函式有2種 深複製與淺複製 當將乙個物件a複製給另乙個物件b時,系統會呼叫複製建構函式 編譯器預設的複製建構函式是淺拷貝,它將原物件的每乙個成員變數複製到新物件的成員變數中去。因而最後兩個物件的變數均指向相同的資料成員的記憶體位址。當資料成員中沒...