簡體   English   中英

使用循環引用處理對象

[英]Disposing of objects with circular references

我的設計如下:

  • __main__引用a
  • a參考b
  • b引用a
  • a被創建,然后從__main__處置

因此, ab具有循環引用。 但是,在del a我希望同時處置ab

我在許多地方看到使用上下文管理器的建議,特別是with語句而不是__del__() 然而,所有我看到的例子with在本地范圍的開始和結束(例如一定的方法的)

可以配合with嗎?
有什么選擇?

我建議:

  • 使用weakref-有時在涉及循環引用時適用
  • 或者只進行手動順序處置的東西,你需要的-而不是在__del__ ,但在明確的dispose 調用在正確的時間方法(S)

通常,當您知道自己有循環引用時,依靠自動__del__處置不是一個好主意。 這很脆弱-即使您設法在某種情況下也可以使用它,但是對依賴項的微小更改也可能再次破壞它。

有什么選擇?

沒做什么。 在您創建像這樣的數百萬個循環引用之前,並且可以證明這一點(並且只有這一點)正在破壞您的程序之前,這實際上並不重要。

垃圾收集器應該可以解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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