Quelle est la différence entre `list.__iadd__` et `list.__add__` et pourquoi cela conduit-il à des résultats différents lors de la modification de listes en Python ?

Linda Hamilton
Libérer: 2024-10-30 08:55:02
original
586 Les gens l'ont consulté

What is the difference between `list.__iadd__` and `list.__add__` and why does it lead to different results when modifying lists in Python?

Comprendre les différences entre list.__iadd__ et list.__add__

En Python, les objets peuvent définir des méthodes « magiques » spéciales pour prendre en charge leur interaction avec certains opérateurs. Deux de ces méthodes sont iadd et __add__, utilisées respectivement pour les opérations d'addition sur place et régulières.

Considérez les deux extraits de code suivants :

<code class="python"># Example 1
x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]

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

Pourquoi ces deux exemples se comportent différemment ?

Dans les deux cas, on part de deux listes identiques, x et y, et on effectue une opération d'addition en utilisant soit x = [4] soit x = x [4].

Lors de l'utilisation de x = [4], la méthode __iadd__ de Python est appelée, qui effectue une addition sur place. Cela signifie que la liste x originale est mutée et son contenu est mis à jour avec les éléments de la liste [4]. En conséquence, x et y contiennent désormais la même liste modifiée.

En revanche, lors de l'utilisation de x = x [4], la méthode __add__ de Python est appelée, qui renvoie une nouvelle liste contenant les éléments des deux x et [4]. La liste d'origine x reste inchangée et y pointe toujours vers la liste initiale non modifiée.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!