2012-12-22 60 views
3

根據Python約定+速度,通常首選什麼?是這樣的:實現「複製構造函數」與使用副本()

class Object(object): 
    def __init__(self, other_object=None): 
     if other_object: 
      self.value = other_object.value 
     else: 
      self.value = something 

然後

obj = Object(other_object) 

,或者使用複製():

from copy import copy 
obj = copy(other_object) 
+0

爲什麼你要提供你自己的副本實現?考慮一個具有任意結構的深層嵌套對象:你的拷貝實現容易出錯......那麼爲什麼? –

+0

我只是問。讓我們假設我的對象非常簡單,就像在這個例子中一樣。 timeit顯示copy()與我的實現非常差的結果。 – AAlon

+1

如果你認爲你更聰明,更快,那麼複製()然後繼續我們自己的實現,編寫測試並做基準測試。 –

回答

5

的事情很簡單,考慮到copy模塊的文檔:

爲了一個類的d efine自己的複製執行,它可以 定義特殊方法__copy__()__deepcopy__()。前者是 調用來實現淺拷貝操作;沒有額外的 參數被傳遞。後者被稱爲執行深拷貝 的操作;它傳遞了一個參數,備忘錄字典。如果 __deepcopy__()實現需要創建組件的深層副本,則應調用deepcopy()函數,並將組件 作爲第一個參數,並將備註字典作爲第二個參數。

因此,如果您覺得標準copy()deepcopy()工作緩慢或存在其他一些問題,只需實施上述方法之一即可。這樣你就可以堅持着名的Python對象複製機制,仍然按照你希望複製的方式複製對象。