2013-03-21 31 views
0

我想deepcopy的一個類的實例,但我得到一個:副本通過值對象沒有__deepcopy__ ATTR

object has no __deepcopy__ atrribute 

錯誤。

該課程被鎖定在.pyd中,所以無法修改。

有沒有辦法通過價值複製這些對象,而不使用deepcopy?

回答

1

您必須複製對象狀態。最簡單的方法是使用pickle模塊:

import pickle 

copy = pickle.loads(pickle.dumps(someobject)) 

不能保證工作。在一般情況下,所有pickle模塊都會爲你提供實例屬性,並從類引用中恢復a-new實例,並恢復其中的屬性內容。

由於這是一個C擴展對象,如果實例狀態沒有公開給你,並且酸洗沒有被類型明確支持,這也不起作用。在那種情況下,我恐怕沒有別的選擇。

+0

實例狀態沒有公開給我,所以我不得不定義一個從原始(不可複製)對象中複製出相關屬性值的對象類。 – ABM 2013-03-21 17:25:34