Gleiche Objekt-ID für aufeinanderfolgende Klasseninstanzen
Beim Erstellen mehrerer Instanzen einer Klasse, ohne ihnen einen Namen zuzuweisen, weist Python dieselbe ID zu alle von ihnen. Dieses auf den ersten Blick überraschende Verhalten ist auf das Konzept der Objektlebensdauer in Python zurückzuführen.
Die ID eines Objekts gewährleistet seine Einzigartigkeit nur während der Lebensdauer des Objekts. Im bereitgestellten Beispiel wird someClass() im Rahmen einer einzelnen Anweisung mehrmals aufgerufen. Jeder Aufruf erzeugt ein neues Objekt. Da diese Objekte jedoch keiner Variablen zugewiesen sind und ihr Gültigkeitsbereich unmittelbar nach Abschluss der Ausführung der Anweisung endet, stehen sie für die Garbage Collection zur Verfügung.
In CPython, der Standardimplementierung von Python, verwendet die Garbage Collection die Referenzzählung. Darüber hinaus ist die ID eines Objekts an seinen Speicherort gebunden. Diese Kombination von Faktoren erklärt, warum die nachfolgenden Instanzen von someClass() dieselbe ID haben: Der Speicher wird freigegeben und wiederverwendet, wenn neue Objekte im selben Funktionsumfang erstellt werden.
Um dieses Verhalten zu beheben und unterschiedliche IDs für die Klasse sicherzustellen In einigen Fällen sollten Sie erwägen, entweder die Objekte in einer Datenstruktur beizubehalten oder ein benutzerdefiniertes ID-Schema innerhalb der Klasse zu implementieren.
Das obige ist der detaillierte Inhalt vonWarum haben aufeinanderfolgende, unbenannte Python-Klasseninstanzen dieselbe Objekt-ID?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!