python弱引用示例,类保持对它所有实例的弱引用,python示例,和许多其它的高级语言一样


和许多其它的高级语言一样,Python使用了垃圾回收器来自动销毁那些不再使用的对象。每个对象都有一个引用计数,当这个引用计数为0时Python能够安全地销毁这个对象。

使用weakref模块,你可以创建到对象的弱引用,Python在对象的引用计数为0或只存在对象的弱引用时将回收这个对象。

如下代码实现了一个类,该类使用WeakValueDictionary 保持对自己所有实例的弱引用。

import weakrefclass InstanceTracker(object):    def __new__(typ, *args, **kw):        #check the class has an __instances__ dict, if not,         #create it and initialize __instance_id.        try:            typ.__instances__        except AttributeError:            typ.__instance_id = 0            typ.__instances__ = weakref.WeakValueDictionary()        obj = object.__new__(typ, *args, **kw)        obj.id = typ.__instance_id        typ.__instances__[typ.__instance_id] = obj        typ.__instance_id += 1        return objif __name__ == "__main__":            class AClass(InstanceTracker): pass    class BClass(InstanceTracker): pass    instances = [(AClass(),BClass()) for i in xrange(5)]    for id, instance in AClass.__instances__.items():        print id, instance, instance.id    for id, instance in BClass.__instances__.items():        print id, instance, instance.id

评论关闭