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

在Python中,默认情况下,引用是“强”引用,而WeakRef模块则允许使用弱引用。

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

在我的特定情况下,我有一个创建对象的缓存,这些对象很耗时。有时可能没有对缓存对象的引用,但是如果不需要的话(例如,如果内存充足),我不想扔掉缓存对象。

最佳答案

除了硬(aka强)和弱之外,Python本身不提供任何形式的引用。

就是说,here是我大约一年前开发的softref实现,在我需要的几个地方使用过。它提供的内容并不是很实际的软引用,但是对于大多数用例来说,它是非常接近的。它的边缘有点粗糙,但是功能齐全……尽管它依赖于内部的一些引用计数,这意味着它可能会破坏除CPython之外的任何东西。

特别是,我专门为缓存创建昂贵的长生命周期对象编写了它……SoftValueDictionary应该正是您要寻找的。

10-08 11:38