Python中,賦值與拷貝(深/淺拷貝)之間是有差異的,這主要源于資料在記憶體中的存放問題,本文將對此加以探討,
1 賦值(添加名字)
賦值不會改變記憶體中資料存放狀態,比如在記憶體中存在一個名為data的資料,此時若執行陳述句data_01 = data,則現在該份資料有了兩個名稱(data和data_01),其余都不發生改變,使用任何一個名稱對資料進行操作,那么用另外一個名稱拿資料時,資料會呈現之間發生的改變,示例如下:

圖中,給串列分配了兩個名稱a與b,對a做改變時b會同樣改變,對b做改變時a也會同樣改變,a,b指向記憶體中同一塊區域,
拷貝
無論是哪種拷貝,資料會重新生成一份放置在另一塊記憶體區域,記憶體存放狀態會因此發生改變,但重新生成的資料會因為深淺拷貝不同而有所不同,
2 淺拷貝(淺層復制)

上圖中,雖然b復制了a的資料存放到另一塊記憶體區域,但復制的程度有限,只達到串列的第一層,第二層的資料存放狀態并沒有改變,
3 深拷貝(深層復制)

深度拷貝則是完完全全地復制,有幾層則拷幾層,
下面以一個三層的串列為例:

小結
對于python中的這三種資料復制機制,如果能夠從記憶體層面理解,則會非常容易;這三種復制機制也會反映在一些第三方庫中,如numpy、pandas等,對于不同的資料分析情況,要有選擇地調取合適的復制機制,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/196565.html
標籤:Python
上一篇:python筆記17
