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

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