Maison > développement back-end > Tutoriel Python > Quelle est la différence subtile entre « i = x » et « i = i x » en Python ?

Quelle est la différence subtile entre « i = x » et « i = i x » en Python ?

Patricia Arquette
Libérer: 2024-12-04 17:13:10
original
858 Les gens l'ont consulté

What's the Subtle Difference Between `i  = x` and `i = i   x` in Python?

La différence subtile entre "i = x" et "i = i x" en Python

En Python, l'opérateur d'affectation "=" fait ce à quoi vous vous attendez : il attribue une valeur à une variable. Cependant, l'opérateur d'affectation augmenté " =" a un comportement légèrement différent, selon le type d'objet modifié.

La clé pour comprendre la différence réside dans les méthodes magiques "__iadd__" et "__ajouter__". "__iadd__" est appelé lorsque l'opérateur d'affectation augmentée est utilisé, tandis que "__add__" est appelé lorsque l'opérateur " " normal est utilisé.

Objets mutables ou immuables

La principale distinction entre " =" et " " devient évidente lorsqu'il s'agit d'objets mutables et immuables. Les objets immuables ne peuvent pas être modifiés, donc leurs méthodes magiques renverront généralement une nouvelle instance. D'un autre côté, les objets mutables peuvent être modifiés, et leurs méthodes magiques modifieront généralement l'objet lui-même.

Cas des objets immuables (par exemple, des entiers)

Pour les objets immuables comme les entiers, " =" et " " ont le même effet. Ils créeront un nouvel entier et l'attribueront à la variable. Par exemple :

i = 1
i += 1  # Same as i = i + 1
Copier après la connexion

Cas des objets mutables (par exemple, des listes)

Pour les objets mutables comme les listes, le comportement de " =" diffère de " ". Considérons l'exemple suivant :

a = [1, 2, 3]
b = a
b += [1, 2, 3]
print(a)  # [1, 2, 3, 1, 2, 3]
print(b)  # [1, 2, 3, 1, 2, 3]
Copier après la connexion

Dans ce cas, l'utilisation de " =" modifie la liste "b" en place. "a" et "b" pointent désormais vers la même liste modifiée.

Comparez ceci avec :

a = [1, 2, 3]
b = a
b = b + [1, 2, 3]
print(a)  # [1, 2, 3]
print(b)  # [1, 2, 3, 1, 2, 3]
Copier après la connexion

Ici, l'utilisation de " " crée une nouvelle liste , qui est attribué à "b". "a" n'est pas affecté car il pointe toujours vers la liste d'origine.

Conclusion

En résumé, le choix entre " =" et " " dépend du type de objet assigné. Pour les objets immuables, les deux opérateurs sont équivalents. Pour les objets mutables, " =" modifie l'objet en place, tandis que " " crée une copie.

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