簡體   English   中英

我在訪問dict中放入了什么傳遞給我的用戶定義的__deepcopy__函數?

[英]What do I put in the visit dict passed to my user-defined __deepcopy__ function?

我需要為我的一個類定義自己的deepcopy函數。 文檔說明函數__deepcopy__()傳遞了一個備忘錄字典,用於跟蹤哪些對象已經被復制,以避免陷入應對遞歸對象。 然而,它並沒有說什么放在字典中。 我是否放置了對象或對象ID? 你如何使用它? 我找不到任何解釋它的網站,除了本書說它不需要使用,除了將它傳遞給__deepcopy__其他調用。

謝謝

要與內置的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM