弱引用 weakref
對對象的弱引用不能保證對象存活:當對像的引用只剩弱引用時, garbage collection 可以銷燬引用並將其內存重用於其他內容。但是,在實際銷燬對象之前,即使沒有強引用,弱引用也一直能返回該對象。
弱引用的主要用途是實現保存大對象的高速緩存或映射,但又並希望大對象僅僅因爲它出現在高速緩存或映射中而保持存活。
例如,如果您有許多大型二進制圖像對象,則可能希望將名稱與每個對象關聯起來。如果您使用Python字典將名稱映射到圖像,或將圖像映射到名稱,則圖像對象將保持活動狀態,因爲它們在字典中顯示爲值或鍵。 weakref
模塊提供的 WeakKeyDictionary
和 WeakValueDictionary
類可以替代Python字典,使用弱引用來構造映射,這些映射不會僅僅因爲它們出現在映射對象中而使對象保持存活。例如,如果一個圖像對象是 WeakValueDictionary
中的值,那麼當對該圖像對象的剩餘引用是弱映射對象所持有的弱引用時,垃圾回收可以回收該對象並將其在弱映射對象中相應的條目刪除。