11

他の言語(Javaなど)では、オブジェクト参照は、Strong、Weak、Soft、またはPhantom(http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html)になります。

Pythonでは、参照はデフォルトで強であり、WeakRefモジュールは弱参照を許可します。

Pythonで「ソフト参照」を持つことは可能ですか?

私の特定のケースでは、作成に時間がかかるオブジェクトのキャッシュがあります。キャッシュされたオブジェクトへの参照がない場合もありますが、必要がない場合(つまり、メモリが豊富な場合)は、キャッシュされたオブジェクトを破棄したくありません。

4

2 に答える 2

6

Python は、ハード (別名ストロング) & ウィーク以外の参照のフレーバーをネイティブに提供していません。

そうは言っても、これは私が1年ほど前に作成したsoftrefの実装であり、必要ないくつかの場所で使用してきました。それが提供するものは、実際のソフト リファレンスではありませんが、ほとんどのユース ケースに近いものです端が少し荒いですが、完全に機能します...ただし、内部でいくつかの参照カウントに依存しているため、CPython 以外ではおそらく壊れるでしょう。

特に、作成するのに費用がかかる長寿命のオブジェクトのキャッシュ用に正確に記述しました...これSoftValueDictionaryはまさにあなたが探しているものです。

于 2011-09-07T11:03:52.423 に答える
0

もう1つのオプションは、メモリ消費量を明示的に計算するのではなく、特定の数のオブジェクト(100など)を維持するキャッシュを使用することです。オブジェクトにアクセスすると、オブジェクトが存在する場合はキャッシュの一番上に配置されるか、キャッシュの一番下にあるオブジェクトが新しいオブジェクトに置き換えられます。

テストされていませんが、理論的には機能するはずです。

于 2011-09-19T13:32:42.397 に答える