python中賦值 淺拷貝 深拷貝之間的關係

2022-02-14 18:46:40 字數 954 閱讀 6853

變數的引用,沒有拷貝空間

物件之間賦值本質上 是物件之間的引用傳遞而已。也就是多個物件指向同乙個資料空間。

. 拷貝可變型別

淺拷貝:

只拷貝第一層資料,不關心裡面的第二層內容,能夠保證外層資料獨立

深拷貝:

拷貝了所有層資料,所有層資料都是獨立。

而一層可變型別資料,深拷貝和淺拷貝是一樣,會拷貝。

. 拷貝不可變型別

一層不可型別資料,深拷貝和淺拷貝也是一樣,不會拷貝,只是引用

多層都是不可型別資料,深拷貝和淺拷貝也是一樣,不會拷貝,只是引用

多層中只要有可變型別資料

淺拷貝:

只關心第一層,如果第一層是不可變型別,不會拷貝,只是引用

深拷貝:

關心所有層,多層中只要有一層是可變型別資料,所有層都拷貝,保證資料獨立

1

import

copy23

#淺拷貝

4copy.copy()

5list.copy()

6dict.copy()

7 d = c[:] #

切邊能拷貝乙個列表89

#深拷貝

兩者主要的區別在於,array(預設)複製乙份物件,asarray不會執行這一動作。

1

def asarray(a, dtype=none, order=none):

2return array(a, dtype, copy=false, order=order)

Python 賦值 淺拷貝 深拷貝

賦值 a b,只拷貝了物件的引用,沒有拷貝內容。兩個物件的id一樣 淺拷貝 copy.copy 構造乙個新的復合物件,然後將子物件引用插入到原始物件的副本中。深拷貝 copy.deepcopy 構造乙個新的復合物件,然後遞迴地將子物件副本插入原始物件的副本。給個栗子 從這個栗子可以看出,對c進行修改...

python賦值 淺拷貝 深拷貝

視覺化 首先了解知識點 可變 list,dict 和不可變 string,int,tuple 淺拷貝 對於string int來說沒有意義,因為它們資料就一層,對於tuple由於是不可變型別所以新的物件會指向原來的物件位址,對於list和dict,新的物件會在記憶體中開闢乙個新的記憶體空間,並且只拷...

淺拷貝 深拷貝和淺賦值 深賦值

include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...