Python标准库—weakref模块

Python的weakref模块提供了创建弱引用的能力,避免对象因被引用而无法被垃圾回收。弱引用允许在对象销毁前通过回调进行操作,常用于缓存和映射中。弱引用包括ref()和proxy(),其中proxy()提供直接访问对象的便利。此外,weakref还提供了WeakKeyDictionary和WeakValueDictionary等数据结构,它们在失去所有强引用时自动清理。weakref.finalize则用于在对象删除时执行清理函数。
摘要由CSDN通过智能技术生成

weakref

weakref模块允许Python程序员创建对对象的弱引用。

对对象的弱引用不足以使对象保持活动状态:当对引用的唯一剩余引用是弱引用时, 垃圾收集可以自由地销毁引用并将其内存重用于其他内容。但是,在实际销毁对象之前,弱引用可能会返回对象,即使没有对它的强引用也是如此。

弱引用的主要用途是实现保存大对象的高速缓存或映射,其中希望大对象不能仅仅因为它出现在高速缓存或映射中而保持活动。

常用

  • weakref.ref(object [,callback ])

    返回对象object的弱引用。如果指示对象仍然存在,则可以通过调用引用对象来检索原始对象; 如果指示对象不再存在,则调用引用对象将返回None。如果提供了callback且不返回None,并且返回的weakref对象仍然存活,则在对象即将销毁时将调用回调; 弱引用对象将作为唯一参数传递给回调; 指示对象将不再可用。

    >>> import weakerf
    >>> 
    >>> class A:
    ...     desc = 'weakref test.'
    ...
    >>> a = A()
    >>> r = weakref.ref(a)
    >>> r
    <weakref at 0x0000027DF702B958; to 'A' at 0x0000027DF71A8A58>
    >>> a
    <__main__.A object at 0x0000027DF71A8A58>
    >>> r()#使用函数调用方式访问所指对象
    <__main__.A object at 0x0000027DF71A8A58>
    >>> a == r()
    True
    >>> r().desc
    'weakref test.'
    >>> del a
    >>> r()#None
    >>> r
    <weakref at 0x0000027DF702B958; dead>
    

    弱引用对象在所指对象销毁时调用回调函数,弱引用对象将作为唯一参数传递给回调

    >>> a = A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值