Heim > Backend-Entwicklung > Python-Tutorial > Warum scheinen sich unveränderliche String-IDs in Python 2.7 zu ändern?

Warum scheinen sich unveränderliche String-IDs in Python 2.7 zu ändern?

Mary-Kate Olsen
Freigeben: 2024-12-23 16:22:18
Original
311 Leute haben es durchsucht

Why Do Immutable String IDs Appear to Change in Python 2.7?

Warum ändert sich die ID eines unveränderlichen Strings?

In Python 2.7 kann das Verhalten von String-IDs rätselhaft sein. Obwohl Zeichenfolgen unveränderlich sind, scheinen sich ihre IDs im Laufe der Zeit zu ändern. In diesem Artikel werden die Gründe für dieses Verhalten untersucht.

Id-Internierung in Python

CPython interniert nicht standardmäßig alle Zeichenfolgen. Allerdings können Zeichenfolgen, die bestimmte Kriterien erfüllen, mit der Funktion sys.intern() oder dem Aufruf intern_string_constants() der Funktion PyCode_New interniert werden. Internierung stellt sicher, dass mehrere Vorkommen derselben Zeichenfolge in der Codebasis dasselbe Objekt verwenden.

Zu den Zeichenfolgen, die für die Internierung in Frage kommen, gehören:

  • In Codeobjekten gespeicherte Konstanten
  • Zeichenfolgen, die nur ASCII-Buchstaben, Ziffern oder Unterstriche enthalten
  • Zeichenfolgen, die sowohl einem Bezeichner als auch seinem Wert zugewiesen sind (z. B. so = 'so')

IDs ändern

Wenn eine Zeichenfolge nicht für das Internieren qualifiziert ist, ändert sich ihre ID weiterhin. Dies liegt daran, dass es Python freisteht, Speicherorte für neue Zeichenfolgen wiederzuverwenden, was zu unterschiedlichen IDs für dasselbe Literal führt.

Internierung und Verwendung von Zeichenfolgen

Das Verhalten von IDs hängt davon ab zur Verwendung der Zeichenfolge:

  • Ohne Variablenreferenz: Wenn Sie anrufen id('so') mehrmals, ohne es einer Variablen zuzuweisen, kann sich die ID ändern, da das internierte String-Objekt verworfen wird.
  • Mit einer Variablenreferenz: Wenn Sie eine Zeichenfolge zuweisen eine Variable (z. B. so = 'so'), bleibt die ID gleich, da die internierte Zeichenfolge an die gebunden ist Variable.

Verketten von Strings

Das Verketten von Strings wirkt sich auch auf IDs aus. Innerhalb der Optimierergrenzen verkettete Zeichenfolgen können zu internierten Zeichenfolgen führen, was zur gleichen ID für die verkettete Zeichenfolge führt.

Fazit

Die ID einer unveränderlichen Zeichenfolge in Python 2.7 lautet aufgrund interner Mechanismen und Speicherwiederverwendung nicht immer gleich. Das Verständnis dieser Faktoren hilft, die offensichtliche Inkonsistenz bei den Zeichenfolgen-IDs zu klären.

Das obige ist der detaillierte Inhalt vonWarum scheinen sich unveränderliche String-IDs in Python 2.7 zu ändern?. 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