Heim > Backend-Entwicklung > Python-Tutorial > Warum ändert sich Pythons „id()' für unveränderliche Strings?

Warum ändert sich Pythons „id()' für unveränderliche Strings?

Mary-Kate Olsen
Freigeben: 2024-12-02 02:23:11
Original
899 Leute haben es durchsucht

Why Does Python's `id()` Change for Immutable Strings?

Veränderlichkeit und Objektidentität in Python-Strings

Pythons Unveränderlichkeit für Strings impliziert, dass sie nach ihrer Erstellung nicht mehr geändert werden können. Allerdings kann sich die Objektidentität, dargestellt durch die Funktion id(), für Strings ändern, was zu Verwirrung führt.

id()-Verhalten für Strings

Im Allgemeinen die id() von Strings ändert sich bei jedem Aufruf, auch für dasselbe String-Literal. Dies liegt daran, dass Python nicht garantiert, dass standardmäßig alle Zeichenfolgen interniert werden.

id('so')
140614155123888
id('so')
140614155123848
id('so')
140614155123808
Nach dem Login kopieren

Es gibt jedoch Ausnahmen. Zeichenfolgen, die die folgenden Kriterien erfüllen, werden interniert und behalten dieselbe id() bei:

  • In Codeobjekten gespeicherte Konstanten
  • Zeichenfolgen, die nur ASCII-Buchstaben, Ziffern oder Unterstriche enthalten

Variablenumfang und Internierung

Das Zuweisen einer Zeichenfolge zu einer Variablen kann deren Einfluss haben id()-Verhalten. Wenn eine Variable auf eine Zeichenfolge verweist, optimiert Python die Leistung, indem es den Wert der Zeichenfolge einmal im Speicher speichert und dabei die interne Version verwendet.

so = 'so'
id('so')  # Now references the same interned string as 'so'
140614155123728
Nach dem Login kopieren

Quelle des internen Verhaltens

Python verwendet intern eine Funktion, um Interne Strings namens intern_string_constants(). Diese Funktion wird auf Zeichenfolgen angewendet, die die zuvor genannten Kriterien erfüllen (z. B. „Hallo“ in Ihrem Beispiel).

Internierung und Optimierung

Pythons Compiler und Optimierer spielen ebenfalls eine Rolle bei der Internierung. Die Codeobjekt-Factory-Funktion kann jede Zeichenfolge internieren, die als gültiger Bezeichner dargestellt werden kann (z. B. „so“ in Ihrem zweiten Beispiel). Darüber hinaus kann der Peephole- oder AST-Optimierer einfache Ausdrücke mit Konstanten falten, was zu internen Ergebnissen führt.

Fazit

Während Pythons Strings unveränderlich sind, kann sich ihre id() abhängig von Faktoren wie ändern Internierung, Variablenbereich und Optimiererverhalten. Ein Praktikum trägt dazu bei, die Speichernutzung und -leistung zu optimieren, und es kann hilfreich sein, sein Verhalten zu verstehen, um mögliche Verwirrung zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum ändert sich Pythons „id()' für unveränderliche Strings?. 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