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

<type'instance'>

<type'weakref'>

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

<type'instance'>

<type'weakref'>

True

None

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值