在我的代碼中,我試圖使用copy.deepcopy
來獲取一個類的實例副本。問題是,在某些情況下它與下面的錯誤示數:如何調試針對自定義類型調用Python的copy.deepcopy()的問題?
TypeError: 'object.__new__(NotImplementedType) is not safe, use NotImplementedType.__new__()'
多挖後,我發現,我可以使用下面的代碼重現錯誤:
import copy
copy.deepcopy(__builtins__)
問題似乎是在某種程度上它試圖複製內建的NotImplementedType
。問題是爲什麼它這樣做?我在班上並沒有重寫__deepcopy__
,而且這種情況一直沒有發生。有沒有人有任何提示來追蹤製作此類拷貝的請求來自哪裏?
我已經在copy
模塊本身中加入了一些調試代碼,以確保這是發生了什麼事情,但問題發生的地方是遞歸堆棧的這麼遠,很難做出我很多東西看到。
你的實例擁有什麼類型的引用? – 2009-12-21 19:11:17
@Matt:實例持有configobj實例和其他東西(其他東西是標準列表和字典等)。 – jkp 2009-12-21 19:12:30
好吧,看起來問題是其中一個成員是一個包含對模塊的引用的詞典。所以現在這個問題似乎是我如何能夠在遇到某些類型時停止深層複製,而不是試圖複製它們(模塊和類在我的情況下)。任何線索? – jkp 2009-12-21 20:33:58