python différence append +

Ajout dans une liste en Python: différence entre + et append

Quand on souhaite ajouter un élément à une liste en Python, il y a une différence entre la méthode append et la syntaxe avec le signe “+”.

Différence entre l’opérateur + et append lors de l’ajout dans une liste en Python: préliminaires

Étant donnée une liste L, on sait que l’on peut ajouter un élément en Python en utilisant l’une des deux solutions suivantes:

L = []
L.append('e')

ou

L = []
L += ['e']

Y a-t-il une différence entre ces deux possibilités ?

Pour le savoir, il faut décortiquer ce qu’elles font.

Différence entre l’opérateur + et append lors de l’ajout dans une liste en Python: l’opérateur “+”

Ce que fait l’opérateur “+”

L’appel de l’opérateur “+” oblige Python à créer une nouvelle liste en laissant de l’espace (à la fin de cette nouvelle liste) pour l’élément à insérer. Ensuite, la première liste est copiée dans celle fraîchement créée et enfin, l’élément est mis en dernier.

Pour résumer, quand on fait appel à l’opérateur “+”:

  • la liste initiale n’est pas modifiée;
  • une nouvelle liste (temporaire) est créée avec un espace en plus;
  • la liste initiale est copiée dans la liste temporaire;
  • le nouvel élément est inséré en fin de la liste temporaire;
  • le pointeur Python (le nom de la liste initiale) est redirigé vers la liste temporaire, qui n’est du coup plus temporaire, mettant ainsi à jour l’objet PythonList.

Complexité

L’ajout de n éléments via l’opérateur “+” admet une complexité en temps en O(n²).

En effet, s’il faut ajouter n éléments, l’opération précédemment expliquée va s’effectuer 1+2+…+n fois:

  • 1 fois pour le premier élément
  • 2 fois pour le deuxième
  • n fois pour le n-ième

Or, \(1+2+\cdots+n=\frac{n(n+1)}{2}\), d’où une complexité de l’ordre de n².

Différence entre l’opérateur + et append lors de l’ajout dans une liste en Python: la méthode append

Ce que fait la méthode append

Contrairement à l’opérateur “+”, la méthode append ne crée pas de nouvelle liste. Elle crée un espace en plus à la suite de l’espace mémoire dédié à la liste à laquelle on souhaite ajouter un élément.

Complexité de la méthode append

Ajouter un élément à la suite de ce qui existe déjà a une complexité de O(1).

Conclusion: que doit-on privilégier ?

Il est évident, à la vue de la complexité des deux possibilités, que la méthode append est à privilégier à l’opérateur “+”, même si elle est plus longue à écrire. Mais ceci est valable pour un n assez grand.

Voici un graphique pour vous en convaincre:

différence append + python
Comparaison de complexité entre l’opérateur “+” et la méthode append (extrait de cette page/)

Je dois bien dire que sur les exemples que je donne sur ce site, ma syntaxe tourne très souvent autour de l’opérateur “+” car il est bien plus facile (pour moi) d’écrire par exemple : ” L += [‘e’]” que “L.append(‘e’)”.

Vous le voyez sur le graphique ci-dessus, si n ne dépasse pas 20 000, ce n’est pas bien grave… Donc vous me pardonnerez je l’espère 🙂

Je pense donc qu’il est important de s’adapter selon ce que l’on fait. Bien évidemment, quand on travaille avec les Big Datas, la méthode append est à privilégier. Mais quand on est prof et que l’on manipule des mini-listes, on peut se permettre l’opérateur “+”. Mais chacun fait ce qu’il veut après tout…

Si vous souhaitez en savoir plus sur les liste, vous pouvez regarder du côté de cette page.

Laisser un commentaire