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