Preface :
透過這個模組, 讓你可以選擇 shallow copy 或 deep copy 的操作. 而模組上的兩個介面如下 :
- copy.copy(x)
- copy.deepcopy(x)
另外包含一個例外 :
- exception copy.error
而所謂的 Deep copy 與 Shallow copy 只在 compound 物件上才會發生差異 (如 list, 或類別上包含其他類別的資訊 etc) :
但在 Deep copy 可能會發生下面問題 :
因此 deepcopy() 為了避免這些問題, 有如下措施 :
另外 copy 動作也不是無差別, 參考下面說明 :
其實如果你是要對 dict 進行 shallow copy, list 物件上面已經有對應函數 dict.copy(), 甚至你可以使用 slice 的方式進行 copy 如 copied_list = original_list[:].
Changed in version 2.5: Added copying functions.
最後為了讓自訂義類別可以決定自己的 copy 過程, 有兩個特殊函數 __copy__() 與 __deepcopy__() 可以進行設定. 第一個是用來在 shallow copy 操作 時使用(無參數) ; 第二個則是使用於 deep copy 操作 , 傳入參數為 memo dictionary 且 :
Example :
接著來看簡單範例, 了解 deep copy 與 shallow copy 的差異 :
沒有留言:
張貼留言