Heim >Backend-Entwicklung >Python-Tutorial >Warum scheinen sich unveränderliche String-IDs in Python 2.7 zu ändern?
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:
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:
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!