Heim > Backend-Entwicklung > Python-Tutorial > Warum haben mehrere Python-Objekte manchmal dieselbe ID?

Warum haben mehrere Python-Objekte manchmal dieselbe ID?

Barbara Streisand
Freigeben: 2024-12-21 20:12:39
Original
321 Leute haben es durchsucht

Why Do Multiple Python Objects Sometimes Share the Same ID?

Gleiche ID für mehrere Objekte: Pythons skurriles Verhalten

In Python kann das Erstellen mehrerer Objekte, ohne ihnen Namen zuzuweisen, tatsächlich dazu führen, dass sie die ID teilen gleiche ID. Dieses scheinbare Paradoxon rührt von der Tatsache her, dass die ID eines Objekts nur innerhalb seiner Lebensdauer eindeutig ist.

Wenn Sie eine Variable erstellen, die auf ein Objekt verweist, wie etwa someClass(), beginnt die Lebensdauer des Objekts, wenn die Variable wird zugewiesen und endet, wenn es außerhalb des Gültigkeitsbereichs liegt. In dem von Ihnen bereitgestellten Beispiel:

print(someClass())
print(someClass())
Nach dem Login kopieren

Die beiden someClass()-Aufrufe führen zu zwei Objekten, die jedoch beide innerhalb desselben Aufrufs zum Drucken erstellt und zerstört werden. Daher haben sie dieselbe Lebensdauer und können dieselbe ID haben.

Dieses Verhalten wird durch die Verwendung der Referenzzählung für die Garbage Collection in Python 3.3.3 noch verstärkt. Wenn der Referenzzähler eines Objekts Null erreicht (d. h. keine Variablen verweisen darauf), kann es gelöscht werden. In unserem Beispiel führt der zweite Aufruf von someClass() dazu, dass der Referenzzähler des ersten Objekts Null erreicht, wodurch es zur sofortigen Freigabe freigegeben wird.

Da das nächste zuzuordnende Objekt am selben Speicherort platziert wird Wie das erste Objekt hat es am Ende dieselbe ID. Dies erklärt, warum das mehrmalige Aufrufen derselben Klasse in schneller Folge zu Objekten mit derselben ID führen kann.

Wenn Sie eindeutige IDs für Objekte benötigen, können Sie dieses Verhalten umgehen, indem Sie sie explizit Variablen zuweisen und diese beibehalten :

a = someClass()
b = someClass()
print(id(a))
print(id(b))
Nach dem Login kopieren

Hier beziehen sich a und b auf separate Objekte mit unterschiedlichen IDs, auch wenn sie derselben Klasse angehören. Alternativ können Sie Ihren eigenen klassenspezifischen ID-Mechanismus implementieren, um die Eindeutigkeit sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum haben mehrere Python-Objekte manchmal dieselbe ID?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage