Maison >développement back-end >Tutoriel Python >Comment la concaténation de chaînes peut-elle sembler muter des chaînes immuables en Python ?

Comment la concaténation de chaînes peut-elle sembler muter des chaînes immuables en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 20:22:30701parcourir

How Can String Concatenation Seem to Mutate Immutable Strings in Python?

Chaînes Python : entités immuables et confusion dans les affectations

Python est fier de l'immuabilité de ses chaînes, ce qui implique que les valeurs des chaînes une fois créées ne peuvent pas être modifiées . Cependant, le comportement déroutant rencontré lors d'une tentative de concaténation de chaînes soulève des questions sur cette immuabilité.

Le casse-tête : mutation de chaînes immuables avec concaténation ?

Considérez l'extrait de code suivant :

<code class="python">a = "Dog"
b = "eats"
c = "treats"

print(a, b, c)  # Dog eats treats

print(a + " " + b + " " + c)  # Dog eats treats

print(a)  # Dog

a = a + " " + b + " " + c
print(a)  # Dog eats treats  # Surprise!</code>

Le code initialise initialement trois chaînes, puis les concatène avec des espaces. À notre grand étonnement, la valeur de a change après la réaffectation au résultat concaténé.

Le dévoilement : la réaffectation de variables, pas la mutation de chaîne

La clé pour comprendre ce comportement réside en reconnaissant que les chaînes Python sont effectivement immuables, alors que leurs références sont mutables. Lorsque nous réattribuons un dans la dernière ligne, nous ne modifions pas la chaîne existante "Dog". Au lieu de cela, nous créons une nouvelle chaîne "Le chien mange des friandises" et attribuons sa référence à a.

La vérité immuable reste

En substance, une variable de chaîne stocke le adresse (ou référence) à une valeur de chaîne, pas à la valeur elle-même. Nous pouvons réaffecter la variable à différentes adresses, mais les valeurs de chaîne à ces adresses restent inaltérables.

Par conséquent, même s'il peut sembler que nous modifions des chaînes avec des concaténations, nous créons simplement de nouvelles chaînes et réaffectons les références. . L'immuabilité des chaînes reste intacte.

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!

Déclaration:
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