Dans Python 2.7, le comportement des ID de chaîne peut être déroutant. Bien que les chaînes soient immuables, leurs identifiants semblent changer avec le temps. Cet article explore les raisons de ce comportement.
Id Interning en Python
CPython n'interne pas toutes les chaînes par défaut. Cependant, les chaînes qui répondent à certains critères peuvent être internées à l'aide de la fonction sys.intern() ou de l'appel intern_string_constants() de la fonction PyCode_New. L'internement garantit que plusieurs occurrences de la même chaîne dans la base de code utilisent le même objet.
Les chaînes admissibles à l'internement incluent :
Modification des identifiants
Si une chaîne n'est pas admissible au stage, son identifiant continuera à changer. En effet, Python est libre de réutiliser les emplacements mémoire pour de nouvelles chaînes, ce qui conduit à des identifiants différents pour le même littéral.
Internement et utilisation des chaînes
Le comportement des identifiants dépend sur la façon dont la chaîne est utilisée :
Concaténation de chaînes
La concaténation de chaînes affecte également les identifiants. Les chaînes concaténées dans les limites de l'optimiseur peuvent conduire à des chaînes internées, ce qui donne le même ID pour la chaîne concaténée.
Conclusion
L'ID d'une chaîne immuable dans Python 2.7 est pas toujours le même en raison des mécanismes d’internement et de la réutilisation de la mémoire. Comprendre ces facteurs permet de clarifier l'incohérence apparente dans les identifiants de chaînes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!