La distinction subtile de Python : "i = x" contre "i = i x"
En Python, les programmeurs utilisent souvent " =" comme un raccourci pour l'affectation d'addition, en s'attendant à ce qu'il se comporte de manière identique à "i = i x". Cependant, cette hypothèse n'est pas toujours correcte.
"i = x" appelle la méthode "__iadd__", tandis que "i = i x" appelle "__add__". Dans la plupart des cas, « __iadd__ » et « __add__ » renvoient des résultats équivalents. Cependant, cela peut varier en fonction de l'objet en question.
Pour les objets mutables, "__iadd__" modifie l'objet en place, tandis que "__add__" crée une nouvelle instance. Cependant, pour les objets immuables, les deux méthodes renvoient une nouvelle instance.
Pour les objets mutables, "__iadd__" est utile pour modifier l'objet en place, économisant ainsi la mémoire. Par exemple :
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]
Comparez cela 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]
Dans ce dernier exemple, a et b deviennent des objets différents.
Dans certains scénarios, "__add__" peut également appeler « __radd__ ». Par exemple, si un objet n'implémente pas "__add__", l'interpréteur peut tenter d'utiliser la méthode "__radd__" de l'autre objet.
En résumé, "i = x" et "i = i x" sont généralement équivalent pour les objets mutables. Cependant, pour les objets immuables, « __iadd__ » et « __add__ » créent des comportements distincts. Comprendre ces nuances est crucial pour une programmation Python efficace.
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!