Python中的weakref简单小结

       当对一个对象的引用只有弱引用的时候,垃圾回收机制可以把孩子个对象在不用了的时候销毁,把内存用于其他地方。

       弱引用其中一个用途是用于实现大对象的缓存或者映射,由于是缓存火映射,对象不需要独立存在。Python weakref中提供WeakKeyDictionary和WeakValueDictionary两个类用于构建非长久驻留内存的对象。当最后一次引用之后,垃圾回收机制会回收其内存。而相应的映射关系也会被删除。这两个类在实现的时候使用了弱引用,并设计了垃圾回收弱引用字典时的回调通知函数。

       并不是所有的对象都可以进行弱引用。

       许多内置的类型,例如列表和字典不能够直接支持弱引用,但是可以通过子类支持。其他的内置类型诸如元组和long,即使通过子类的方式也不能够进行弱引用。

       为了展示简单的weakref功能,写如下代码:

import weakref

 

class MyClass:

       pass

 

myObj = MyClass()

myRef =weakref.ref(myObj)

myRefObj = myRef()

 

print(type(myObj))

print(type(myRef))

 

print(myRefObj ismyObj)

       程序的执行结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python weakref_demo.py

True

       从上面看,两个实例对象一致。修改代码如下:

import weakref

 

class MyClass:

       pass

 

myObj = MyClass()

myRef =weakref.ref(myObj)

myRefObj = myRef()

 

print(type(myObj))

print(type(myRef))

 

print(myRefObj ismyObj)

 

del myObj,myRefObj

print(myRef())

       程序的执行结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python weakref_demo.py

True

None

       从上面的结果可以看出,在被引用的对象全都使用完之后,weakref对象也变不再存在。

你可能感兴趣的:(Python,OOP)