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.
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
Cependant, il existe des exceptions. Les chaînes qui répondent aux critères suivants sont internées et conserveront le même id() :
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
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).
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.
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!