Python中是否存在"软引用"?

afa*_*dge 9 python reference soft-references

在其他语言(例如Java)中,对象引用可以是Strong,Weak,Soft或Phantom(http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html).

在Python中,默认情况下引用为Strong,而WeakRef模块允许弱引用.

是否可以在Python中使用"软引用"?

在我的特定情况下,我有一个对象的缓存,这些对象的创建非常耗时.有时可能没有对缓存对象的引用,但是如果我不需要(例如,如果内存很多),我不想抛弃缓存的对象.

Eli*_*ins 6

除了硬(又强)和弱之外,Python本身并不提供任何类型的引用.

也就是说,是我在大约一年前掀起的一个softref实现,我在一些我需要的地方使用过.它提供的内容并不是真正的软引用,但它在大多数用例中都很接近.它的边缘有点粗糙,但功能齐全......虽然它依赖于内部的一些引用计数,这意味着除了CPython之外它可能会破坏任何东西.

特别是,我写的正是为了创建昂贵的长寿命对象的缓存......这SoftValueDictionary应该是你正在寻找的.

  • @JamesBlackburn我为此道歉,我毫不犹豫地将那个脚本从我的dev文件夹中删除了.我已经更新了文件以包含BSD许可证. (3认同)