python中的弱引用weakref

2021-10-11 04:01:00 字數 802 閱讀 6915

1. 弱引用的作用

弱引用是為了解決迴圈引用(circular reference)的問題:物件存在__del__()方法時可能導致記憶體洩露。

對物件的弱引用不能保證物件存活:當對像的引用只剩弱引用時, garbage collection 可以銷毀引用並將其記憶體重用於其他內容。但是,在實際銷毀物件之前,即使沒有強引用,弱引用也一直能返回該物件。python docs

2. 對比weakref.ref()和weakref.proxy()

看上去,weakref.proxy()使用起來更方便。

import weakref

class

printer

:def

__init__

(self,a)

: self.a = a

print

('a=%d'

%a)obj_a = printer(10)

obj_b = weakref.ref(a)

obj_c = weakref.proxy(a)

# ********** address

# obj_a: <__main__.printer object at 0x7fc325488a90>

# obj_b:

# obj_c:

# ********** content:

# a.a=10, b().a=10, c.a=10

# b.a報錯:attributeerror: 'weakref' object has no attribute 'a'

iOS 弱引用weak的使用

oc開發過程中,我們經常會使用到弱引用和強引用 我們為什麼要使用弱引用呢?要想知道這個我們需要weak的原理。原理 runtime維護了乙個weak表,其實weak是乙個hash 雜湊 表,其中key表示指向物件的指標,value是乙個陣列,裡面儲存的weak指標的位址陣列,當我們使用 weak的時...

C 中的弱引用

了解弱引用之前,先了解一下什麼是強引用 例如 object obj new object 就是乙個強引用,記憶體分配乙份空間給用以儲存object資料,這塊記憶體有乙個首位址,也就是obj所儲存的資料,記憶體分配的空間中不僅僅儲存著object物件資訊,還儲存著自己 object本身 被引用的次數。...

C 中的弱引用

了解弱引用之前,先了解一下什麼是強引用 例如 object obj new object 就是乙個強引用,記憶體分配乙份空間給用以儲存object資料,這塊記憶體有乙個首位址,也就是obj所儲存的資料,記憶體分配的空間中不僅僅儲存著object物件資訊,還儲存著自己 object本身 被引用的次數。...