文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>python中weakref模块

python中weakref模块

时间:2010-06-10  来源:hkebao

python中weakref模块

时间:2010-6-10

依据这个模块程序员能够创建一个弱引用指向一个对象(PS:在JAVA里面如果一个对象没有被引用或只有弱引用的话就会被GC回收内存空间)

A primary use for weak references is to implement caches or mappings holding large objects, where it’s desired that a large object not be kept alive solely because it appears in a cache or mapping.

弱引用用在大对象的

弱引用示例

>>> import weakref
>>> class Object:
...     pass
...
>>> o = Object()                            一个引用指向这个对象
>>> r = weakref.ref(o)                      创建一个弱引用对象
>>> o2 = r()
>>> o is o2                                 当前这个对象与弱引用对象其实是一个
True
 
PS:一个对象会有其引用计数。就是说这个对象有多少个引用在引用它!当这个引用计数为0的时候就会被GC回收!
 
使用weakref模块,你可以创建到对象的弱引用,Python在对象的引用计数为0或只存在对象的弱引用时将回收这个对象。
 
一旦没有了对这个对象的其它的引用,调用弱引用将返回None,因为Python已经销毁了这个对象。
注意:大部分的对象不能通过弱引用来访问。
 
9.2、创建代理对象

代理对象是弱引用对象,它们的行为就像它们所引用的对象,这就便于你不必首先调用弱引用来访问背后的对象。通过weakref模块的proxy(obj[,callback])函数来创建代理对象。使用代理对象就如同使用对象本身一样:
>>>
from socket import*
>>>
import weakref
>>>
s=socket(AF_INET,SOCK_STREAM)
>>>
ref=weakref.proxy(s)
>>>
s
<socket._socketobject
instance at 007E4874>
>>>
ref
<socket._socketobject
instance at 007E4874>
>>>
ref.close() #对象的方法同样工作

callback
参数的目的和ref函数相同。在Python删除了一个引用的对象之后,使用代理将会导致一个weakref.ReferenceError错误:
>>>
def s
>>>
ref
Traceback
(most recent call last):
File "<stdin>", line 1, in ?

 

代理对象有什么好处?

跟引用它本身其实是一个样

 

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载