11 Stimmen

Können "weiche Referenzen" in Python existieren?

In anderen Sprachen (z.B. Java) können Objektreferenzen Stark, Schwach, Weich oder Phantom sein (http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html).

In Python sind Referenzen standardmäßig stark und das WeakRef-Modul ermöglicht schwache Referenzen.

Ist es möglich, "weiche Referenzen" in Python zu haben?

In meinem speziellen Fall habe ich einen Cache von Objekten, die zeitaufwendig zu erstellen sind. Manchmal gibt es möglicherweise keine Referenzen auf ein zwischengespeichertes Objekt, aber ich möchte das zwischengespeicherte Objekt nicht wegwerfen, wenn ich es nicht muss (z.B. wenn der Speicher reichlich vorhanden ist).

6voto

Eli Collins Punkte 7985

Python bietet von Haus aus keine anderen Arten von Referenzen außer harten (auch starke genannt) und schwachen an.

Trotzdem, hier ist eine Softref-Implementierung, die ich vor etwa einem Jahr erstellt habe und die ich an einigen Stellen benutzt habe, wo ich eine benötigte. Was sie bietet sind nicht ganz echte Soft-Referenzen, aber sie kommen den meisten Anwendungsfällen nahe. Es ist ein wenig grob um die Kanten, aber voll funktionsfähig... obwohl es intern auf einigen Referenzzählungen basiert, was bedeutet, dass es wahrscheinlich nur auf CPython funktionieren wird.

Insbesondere habe ich sie genau für einen Cache von teuren, langlebigen Objekten geschrieben... das SoftValueDictionary sollte genau das sein, wonach Sie suchen.

0voto

afaulconbridge Punkte 1026

Eine andere Möglichkeit besteht darin, einen Cache zu verwenden, der eine bestimmte Anzahl von Objekten (z. B. 100) speichert, anstatt ihren Speicherverbrauch explizit zu berechnen. Wenn auf ein Objekt zugegriffen wird, wird es oben im Cache platziert, wenn es vorhanden ist, oder das Objekt unten im Cache wird durch das neue Objekt ersetzt.

Ungetestet, aber es sollte in der Theorie funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X