博文

目前显示的是 五月, 2024的博文

Python弱引用

Python 弱引用 介绍 引用的存在使对象在内存中保持活力。当对象的引用计数为零时,垃圾回收器就会将其丢弃。但有时,为了避免对象在内存中停留过久,拥有该对象的引用是非常有用的。一个常见的用例就是缓存。   对对象的弱引用不会增加其引用计数。作为引用目标的对象称为引用对象。因此,我们说弱引用不会阻止引用对象被垃圾回收。   弱引用在缓存应用程序中非常有用,因为您不希望缓存的对象仅仅因为被缓存引用而保持活动状态。   示例 1 展示了如何调用 weakref.ref 实例来访问其引用对象。如果对象是存活的,调用弱引用会返回该对象,否则返回 None 。   Tip : 示例 1 是一个控制台会话, Python 控制台自动将变量绑定到非 None 表达式的结果。这干扰了我的预期演示,但也强调了一个实际问题:当尝试对内存进行微观管理时,我们常常会对隐藏的隐式赋值感到惊讶,这些赋值创建了对对象的新引用。控制台变量就是一个例子。回溯对象是意外引用的另一个常见来源。   示例 1. 弱引用是一个可调用对象,它返回被引用的对象,如果引用对象不再存在,则返回 None >>> import weakref >>> a_set = {0, 1} >>> wref = weakref.ref(a_set)   (1) >>> wref <weakref at 0x100637598; to 'set' at 0x100636748> >>> wref()   (2) {0, 1} >>> a_set = {2, 3, 4}   (3) >>> wref()   (4) {0, 1} >>> wref() is None   (5) False >>> wref() is None   (6) True ( 1 ) wref 弱引用对象在下一行中创建并检查。...