Python et les paramètres de fonction

Voici un article qui explique le mystère du comportement parfois bizarre de Python, par rapport à d’autres langages, quand on passe des variables en arguments dans des fonctions.

Quand on passe un entier ou une chaîne, via une variable, dans un paramètre de l’appel d’une fonction, si je change ce paramètre, la variable d’origine reste inchangé.
On peut conclure que Python fonctionne en passant la valeur contenue dans la variable.

Ce modèle de fonctionnement se nomme transmission par valeur.

Mais si je passe une liste ou un dictionnaire, via une variable, dans un paramètre de l’appel d’une fonction, si je change ce paramètre, le contenu de la variable d’origine change !
On peut conclure que Python fonctionne alors en passant une référence vers le contenu de la variable.

Ce modèle de fonctionnement se nomme transmission par référence.

En fait Python utilise un autre modèle, la transmission par assignation.

La modification du contenu de la variable d’origine dépend de la mutabilité du type de contenu de la variable (d’où l’importance de connaître le type de contenu de ses variables), lors de l’assignation d’une valeur au contenu.

  • Si le type est immuable (immutable), comme les entiers et les chaînes, alors tenter de modifier son contenu va créer un nouveau contenu.
  • Si le type est modifiable (mutable), alors si on modifie le contenu, c’est bien le contenu d’origine qui est modifié.

Dans Python, tout est objet. Les contenus sont des instances de classes de type. Les variables ne sont que des étiquettes pointant vers ces instances de contenu.

L’article qui suit est en anglais, et détaille ce fonctionnement par des exemples :

1 « J'aime »