[python]weakref 的小例子
最近才碰到什麼叫做 weakref。直接舉個例子:
import weakref, time
class A:
def __del__(self):
print 'class A been __del__'class B:
def make_a(self):
refa = A()
self.a_ref = weakref.ref(refa)
return refa
b = B()
print '+make_a'
b.make_a()
print '-make_a'
print '+x = b.make_a()'
x = b.make_a()
print '-x = b.make_a()'
print '+time.sleep(10)'
time.sleep(10)
print '-time.sleep(10)'
執行的結果如下:
+make_a
class A been __del__
-make_a
+x = b.make_a()
-x = b.make_a()
+time.sleep(10)
-time.sleep(10)
class A been __del__
首先,__del__ 是物件被刪掉的時候會被呼叫的函式。
接下來,雖然在 class B 裡面,有用 self.a_ref 去接了類別 A 的實例 refa,
但是,若沒有在呼叫 b.make_a() 的時候用個變數去接 refa,馬上 refa 就被刪掉了。
若是有用個變數 x 去接 refa,
x = b.make_a()
那就可以撐到執行完了!