Maison > développement back-end > Tutoriel Python > Pourquoi le « id() » de Python change-t-il pour les chaînes immuables ?

Pourquoi le « id() » de Python change-t-il pour les chaînes immuables ?

Mary-Kate Olsen
Libérer: 2024-12-02 02:23:11
original
907 Les gens l'ont consulté

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

Mutabilité et identité d'objet dans les chaînes Python

L'immuabilité de Python pour les chaînes implique qu'elles ne peuvent pas être modifiées une fois créées. Cependant, l'identité de l'objet, représentée par la fonction id(), peut changer pour les chaînes, conduisant à une confusion.

Comportement id() pour les chaînes

En général, l'id() des chaînes change à chaque fois qu'il est appelé, même pour la même chaîne littérale. En effet, Python ne garantit pas l'interne de toutes les chaînes par défaut.

id('so')
140614155123888
id('so')
140614155123848
id('so')
140614155123808
Copier après la connexion

Cependant, il existe des exceptions. Les chaînes qui répondent aux critères suivants sont internées et conserveront le même id() :

  • Constantes stockées dans des objets de code
  • Chaînes contenant uniquement des lettres, des chiffres ou des traits de soulignement ASCII

Portée de la variable et interne

L'attribution d'une chaîne à une variable peut influencer son comportement id(). Lorsqu'une variable fait référence à une chaîne, Python optimise les performances en stockant une fois la valeur de la chaîne en mémoire, en utilisant la version interne.

so = 'so'
id('so')  # Now references the same interned string as 'so'
140614155123728
Copier après la connexion

Source du comportement interne

Python utilise en interne une fonction pour chaînes internes appelées intern_string_constants(). Cette fonction est appliquée aux chaînes qui répondent aux critères mentionnés précédemment (par exemple, « bonjour » dans votre exemple).

Stagiaire et optimisation

Le compilateur et les optimiseurs de Python jouent également un rôle dans le stage. La fonction de fabrique d'objets de code peut intégrer n'importe quelle chaîne pouvant être représentée comme un identifiant valide (par exemple, « donc » dans votre deuxième exemple). De plus, le judas ou l'optimiseur AST peut plier des expressions simples impliquant des constantes, conduisant à des résultats internes.

Conclusion

Bien que les chaînes de Python soient immuables, leur id() peut changer en fonction de facteurs tels que stage, portée variable et comportement de l'optimiseur. L'internement permet d'optimiser l'utilisation et les performances de la mémoire, et il peut être utile de comprendre son comportement pour éviter toute confusion potentielle.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal