Ich möchte Objekte eines bestimmten Typs verfolgen, die gerade verwendet werden. Zum Beispiel: Verfolgen Sie alle Instanzen einer Klasse oder alle Klassen, die von einer Metaklasse erstellt wurden.In Python: Wie entferne ich ein Objekt von einer Liste, wenn es nur in dieser Liste referenziert wird?
Es ist leicht, wie diese Spur von Instanzen zu halten:
class A():
instances = []
def __init__(self):
self.instances.append(self)
Aber wenn eine Instanz nicht irgendwo außerhalb dieser Liste verwiesen wird, es wird nicht mehr benötigt werden, und ich möchte nicht, dass die Instanz verarbeiten in eine möglicherweise zeitaufwendige Schleife.
Ich habe versucht, Objekte zu entfernen, die nur in der Liste mit sys.getrefcount referenziert werden.
Das Problem, das ich habe, ist, dass die Referenzzahl sehr unklar ist. Öffnen einer neuen Schale und eine Dummy-Klasse ohne Inhalt kehrt 5 Erstellung für
sys.getrefcount(DummyClass)
Eine weitere Idee ist es, die Objekte dann das Löschen der Liste und Überprüfung zu kopieren, welche Objekte für Mülleinsammlungs und im letzten Schritt geplant Entfernen wurden diese Objekte. Etwas wie:
Copy = copy(A.instances)
del A.instances
A.instances = [i for i in Copy if not copy_of_i_is_in_GC(i)]
Die Objekte müssen nicht sofort entfernt werden, wenn der Referenzzähler auf 0 geht ich einfach nicht zu viele Ressourcen auf Objekte verschwenden will, das nicht mehr verwendet werden.
Verwenden Sie eine [schwache Referenz] (https://docs.python.org/3.5/library/weakref.html) – Barmar
http://stackoverflow.com/questions/12101958/keep-track-of-instances-in -python –
http://effbot.org/pyfaq/how-do-i-get-a-list-of-all-instances-of-a-given-class.htm –