Heim > Backend-Entwicklung > Python-Tutorial > Warum scheinen unveränderliche Python-Strings wechselnde IDs zu haben?

Warum scheinen unveränderliche Python-Strings wechselnde IDs zu haben?

Linda Hamilton
Freigeben: 2024-12-01 07:18:11
Original
724 Leute haben es durchsucht

Why Do Immutable Python Strings Seem to Have Changing IDs?

Verstehen der sich ändernden ID von unveränderlichen Strings in Python

In Python haben unveränderliche String-Objekte aufgrund von Faktoren wie String-Internierung typischerweise sich ändernde IDs , Wiederverwendung von Speicherorten und Codeoptimierung. Während Unveränderlichkeit auf eine konstante ID schließen lässt, wurde das folgende Verhalten beobachtet:

Ursprüngliche Beobachtung:

id('so') # Changes on every call
Nach dem Login kopieren

Ändernde IDs:

Dieses Verhalten wird durch das Fehlen einer garantierten String-Internierung in CPython verursacht. Python interniert nicht immer Zeichenfolgen, daher können wiederholte Aufrufe von id('so') zu unterschiedlichen IDs führen.

Wiederverwendung von Speicherorten:

Python kann Speicherorte für wiederverwenden neue String-Objekte, was zu gelegentlichen ID-Übereinstimmungen auch für verschiedene Strings führt. Dies ist unvorhersehbar und hängt von der Speichernutzung ab.

Codeoptimierung:

Python-Optimierer können konstante Ausdrücke (z. B. „foo“ „bar“) zur Kompilierungszeit falten. Speichern der resultierenden Zeichenfolge an einem einzigen Speicherort. Dies führt zu konsistenten IDs für diese Ausdrücke.

Ausnahme:

Konstante Zeichenfolgen, die ASCII-Buchstaben, Ziffern oder Unterstriche verwenden, werden vom Python-Compiler interniert. Daher verwenden nachfolgende Literale mit denselben Zeichen dasselbe interne Zeichenfolgenobjekt wieder, was zu konsistenten IDs führt.

Zusätzliche Beobachtungen:

  • Zuweisen einer Zeichenfolge zu a Variable (z. B. so = 'so') friert die ID ein, da Python sowohl für den Variablennamen als auch für seinen Variablennamen auf dasselbe String-Objekt verweist Wert.
  • Mit externen Methoden erstellte Zeichenfolgen folgen möglicherweise nicht diesen Internierungs- oder Optimierungsregeln.
  • Das Verketten von kurzen Zeichenfolgen kann dennoch zu einer Internierung führen, wenn das Ergebnis innerhalb der Optimierungsgrenzen liegt.

Das obige ist der detaillierte Inhalt vonWarum scheinen unveränderliche Python-Strings wechselnde IDs zu haben?. 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