Python 賦值 淺拷貝 深拷貝

2021-08-19 16:41:04 字數 461 閱讀 9717

賦值:a=b,只拷貝了物件的引用,沒有拷貝內容。兩個物件的id一樣

淺拷貝:copy.copy(),構造乙個新的復合物件,然後將子物件引用插入到原始物件的副本中。

深拷貝:copy.deepcopy(),構造乙個新的復合物件,然後遞迴地將子物件副本插入原始物件的副本。

給個栗子:

從這個栗子可以看出,對c進行修改時,d由於只複製了c的引用,所以看上去也進行了修改,實際指向的是同一記憶體。e和f由於是建立了乙個新的物件,所以沒有修改。

對a進行修改時,e由於拷貝的是a的引用也跟著產生了相應的變化,f是對子物件新建了乙個相應的副本物件,所以沒有修改。

筆者還對python 3.6.5的官方文件相應的部分進行了簡單翻譯,可以作為參考。

copy的簡單翻譯

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...

賦值 淺拷貝 深拷貝

堆是動態分配記憶體,記憶體大小不一 棧是自動分配相對固定大小的記憶體空間,並由系統自動釋放 基本資料型別值是不可變的,比較是值的比較 基本資料型別,傳值。開闢乙個新的記憶體空間 js 基本資料型別,儲存在 棧 中,記憶體可以及時 引用型別值是可變的,比較是引用的比較,看其引用是否指向同乙個物件 引用...