![](/img/trans.png)
[英]In Python, how can I call copy.deepcopy in my implementation of __deepcopy__()?
[英]What do I put in the visit dict passed to my user-defined __deepcopy__ function?
要與內置的copy.deepcopy
行為保持一致,您應該使用對象的id
作為鍵。
更多細節:
雖然你經常可以使用不同的密鑰方案(例如對象本身,如果它是可以清除的),但只要你保持一致,你仍然可能遇到麻煩。 通常通過在一些包含的屬性上調用__deepcopy__
來實現copy.deepcopy
。 如果添加的項目直接向memo
,你必須要一定的鍵無法與添加的項碰撞copy.deepcopy
,增加了由生成的密鑰id
,它是整數。
因此,如果您使用不同的密鑰方案,例如直接將對象用作密鑰,則無法添加任何整數對象。
底線:
使用id
更容易,而不必擔心上面的例外情況。
回答我自己的問題,感謝@ Jon-Eric:
我從http://www.doughellmann.com/PyMOTW/copy/中顯示的示例中了解到,您使用self
作為鍵,將復制的對象用作值。 然后,當嘗試再次復制該對象( self
)時,可以檢查備忘錄字典以查看它是否已被復制,並將引用返回到副本memo[self]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.