Files
org-roamings/20220516125736-difference_entre_les_operateurs_et.org
2022-06-04 12:57:39 +02:00

1.3 KiB

Différence entre les opérateurs + et +=

Introduction

Comment expliquer la différence de comportement entre les opérateurs + et += :

a1 = a2 = [1, 2]
a1 += [3] # Uses __iadd__, modifies a1 in-place
print(f"When += is used: {a1=}, {a2=}")

a1 = a2 = [1, 2]
a1.extend([3]) # Uses __add__, creates new list, assigns it to b1
print(f"When extend is used: {a1=}, {a2=}")

a1 = a2 = [1, 2]
a1 = a1 + [3] # Uses __add__, creates new list, assigns it to b1
print(f"When + is used: {a1=}, {a2=}")
When += is used: a1=[1, 2, 3], a2=[1, 2, 3]
When extend is used: a1=[1, 2, 3], a2=[1, 2, 3]
When + is used: a1=[1, 2, 3], a2=[1, 2]

Explications

L'opérateur += appelle la méthode dunder iadd. Si celle-ci n'existe pas (cas des objets immutables), il appelle add:

  • La méthode iadd signifie in-place addition : cela implique la modification de l'objet mutable (et non la création d'une nouvelle instance - cf. add),
  • La méthode add retourne un nouvel object contenant le résultat de l'opération.

Références