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.
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
Es gibt jedoch Ausnahmen. Zeichenfolgen, die die folgenden Kriterien erfüllen, werden interniert und behalten dieselbe id() bei:
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
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).
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.
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!