Gibt es eine Möglichkeit, die aktuelle Ref-Anzahl eines Objekts in Python abzurufen?
python
refcounting
GEOCHET
quelle
quelle
Über das
gc
Modul, die Schnittstelle zu den Garbage Collector-Eingeweiden, können Sie aufrufengc.get_referrers(foo)
, um eine Liste aller Verweise abzurufenfoo
.Daher erhalten
len(gc.get_referrers(foo))
Sie die Länge dieser Liste: die Anzahl der Überweiser, nach denen Sie suchen.Siehe auch die
gc
Moduldokumentation .quelle
sys.getrefcount(object)
) ist einfacher alslen(gc.get_referrers(foo))
, wenn Sie wirklich nur die Nummer brauchen.Es gibt
gc.get_referrers()
undsys.getrefcount()
. Es ist jedoch schwer zu erkennen, wiesys.getrefcount(X)
der Zweck der traditionellen Referenzzählung erfüllt werden kann. Erwägen:Dann
function(SomeObject)
liefert '7',sub_function(SomeObject)
liefert '5',sub_sub_function(SomeObject)
liefert '3' undsys.getrefcount(SomeObject)
liefert '2'.Mit anderen Worten: Wenn Sie verwenden
sys.getrefcount()
, müssen Sie die Tiefe des Funktionsaufrufs kennen. Zum Beispiel mussgc.get_referrers()
man die Liste der Referrer filtern.Ich würde vorschlagen, eine manuelle Referenzzählung für Zwecke wie "Isolation bei Änderung" durchzuführen, dh "Klon, wenn an anderer Stelle darauf verwiesen wird".
quelle
ctypes verwendet die Adresse der Variablen als Argument. Der Vorteil der Verwendung von ctypes gegenüber sys.getRefCount besteht darin, dass Sie nicht 1 vom Ergebnis abziehen müssen.
quelle