copy 複製物件

2022-01-29 04:45:40 字數 566 閱讀 8046

作用:提供一些函式,可以使用淺副本或深副本語義複製物件

1.淺副本

copy()建立的淺副本(shallow  copy)是乙個形容器,其中填充原物件內容的引用,建立list物件的乙個淺副本時,會構造乙個新的list.並將原物件的元素追加到這個list。

1.深副本

deepcopy()建立的深副本是乙個新容器,其中填充原物件內容的副本。要建立乙個list的副本,會構造乙個新的list,複製原列表的元素,然後將這些副本追加到新列表。

3.定製複製行為

可以使用特殊方法__copy__()和__deepcopy__()來控制如何建立副本。

呼叫__copy__()而不提供任何引數,這會返回物件的乙個淺副本。

呼叫__deepcopy__(),並提供乙個唄望指點,這會返回物件的乙個生副本。所有需要深複製的成員屬性都要連同誒網字典傳遞到copy.deepcopy()來控制遞迴。

4.深副本中的遞迴

為了避免複製遞迴資料結構可能帶來的問題,deepcopy()使用了乙個字典來跟中已經複製的物件。將這個字典傳入__deepcopy__()方法,從而在該方法中也可以進行檢查。

Copy 複製功能

在實際專案中,經常需要資料新增的時候 能夠直接copy 有的資料 稍微做一些修改就可以完成新的資料使用。那麼copy功能如何 實現?其實非常簡單 分為倆個部分 1 被複製的源資料查詢出來 根據id 2 將內容進行新增 只需要將一些不能相同的列如code id這些稍微改動一下 操作 查詢資料來源 將一...

第二章 資料結構 copy 複製物件 定製複製行為

2.9.3 定製複製行為 可以使用特殊方法 copy 和 deepcopy 來控制如何建立副本。呼叫 copy 而不提供任何引數,這會返回物件的乙個淺副本。呼叫 deepcopy 並提供乙個備忘字典,這會返回物件的乙個深副本。所有需要深複製的成員屬性都要連同備忘字典傳遞到copy.deepcopy ...

阻止物件被Copy

通常如果你不希望class支援某一特定機能,只要不宣告對應函式就是了。但這個策略對copy建構函式和copy assignment操作符卻不起作用。如果你自己沒有宣告,編譯器就會為你的class宣告 編譯器版本的 乙個copy建構函式 乙個copy assignment操作符和乙個析構函式。此外如果...