Maison > développement back-end > Tutoriel Python > Pourquoi `list.__iadd__` modifie-t-il à la fois les listes originales et assignées, alors que `list.__add__` ne modifie que la liste assignée ?

Pourquoi `list.__iadd__` modifie-t-il à la fois les listes originales et assignées, alors que `list.__add__` ne modifie que la liste assignée ?

Susan Sarandon
Libérer: 2024-10-30 17:05:25
original
668 Les gens l'ont consulté

Why does `list.__iadd__` modify both original and assigned lists, while `list.__add__` only modifies the assigned list?

Différence de comportement entre list.__iadd__ et list.__add__

Considérez l'extrait suivant :

<code class="python">x = y = [1, 2, 3, 4]
x += [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4, 4]</code>
Copier après la connexion

En revanche , observez ceci :

<code class="python">x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4]</code>
Copier après la connexion

Pourquoi ces deux extraits de code se comportent-ils différemment ?

Explication

La principale différence réside dans l'utilisation du Opérateur " ". Dans le premier extrait :

  • x = [4] utilise la méthode __iadd__ de la classe list, qui :

    • Mute la liste d'origine (x) dans -place
    • L'étend avec les éléments de la deuxième liste ([4])

Cela entraîne la modification de x et y pour inclure la valeur 4.

Dans le deuxième extrait, cependant, x = x [4] utilise la méthode __add__ :

  • x [4] crée une nouvelle liste en concaténant x avec [4]
  • La variable x est ensuite réaffectée à cette nouvelle liste
  • y reste inchangé puisqu'il s'agit d'un objet différent

X a donc la valeur [1, 2 , 3, 4, 4] tandis que y contient toujours la valeur d'origine [1, 2, 3, 4].

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