Maison > développement back-end > Tutoriel Python > Pourquoi `x = [4]` modifie-t-il `x` mais `x = x [4]` crée-t-il une nouvelle liste en Python ?

Pourquoi `x = [4]` modifie-t-il `x` mais `x = x [4]` crée-t-il une nouvelle liste en Python ?

Susan Sarandon
Libérer: 2024-10-30 02:09:03
original
987 Les gens l'ont consulté

Why Does `x  = [4]` Modify `x` but `x = x   [4]` Create a New List in Python?

Comportement disparate : list.__iadd__ vs list.__add__

Considérez le code Python énigmatique suivant :

x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]
Copier après la connexion

Maintenant, juxtaposez-le à cet extrait de code :

x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]
Copier après la connexion

Ce qui nous laisse perplexes, c'est la différence marquée dans leur comportement. Pourquoi x = [4] modifie-t-il la liste x d'origine, alors que x = x [4] génère une nouvelle liste ?

La réponse réside dans les méthodes objet de Python. list.__iadd__ mute la liste existante en y ajoutant les éléments de la deuxième liste. À l'inverse, list.__add__ crée une nouvelle liste comprenant les éléments des deux listes d'entrée.

Une expression comme x = y tente d'abord d'invoquer __iadd__. Si __iadd__ est disponible, il exécutera cette magie de mutation. Sinon, la valeur par défaut sera __add__, ce qui créera une nouvelle liste et l'attribuera à x. Puisque la classe de liste définit __iadd__, le premier extrait de code mute la liste x d'origine, tandis que le dernier extrait de code crée une nouvelle liste et l'attribue à x, laissant y inchangé.

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 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