logo

Passer par référence vs valeur en Python

Les développeurs qui se lancent dans la programmation Python à partir d'autres langages comme C++ et Java sont souvent déconcertés par le processus de transmission des arguments en Python. Le modèle de données centré sur l'objet et son traitement de l'affectation sont les causes de la confusion au niveau fondamental.

Dans cet article, nous aborderons le concept de comment passer une valeur par référence en Python et essayez de comprendre les exemples de passage par référence en Python.

Table des matières



Passer par valeur et passer par référence en Python

Vous voudrez peut-être frapper quelque chose après avoir lu à l'avance, alors préparez-vous. Le modèle de transmission d'arguments de Python est ni Pass by Value ni Pass by Reference mais c'est Pass by Object Reference.

Selon le type d'objet que vous transmettez dans la fonction, la fonction se comporte différemment. Les objets immuables affichent le passage par valeur tandis que les objets mutables affichent le passage par référence.

Vous pouvez vérifier la différence entre le passage par valeur et le passage par référence dans l'exemple ci-dessous :

avec forme complète

Python3




def> call_by_value(x):> >x>=> x>*> 2> >print>(>'in function value updated to'>, x)> >return> > def> call_by_reference(>list>):> >list>.append(>'D'>)> >print>(>'in function list updated to'>,>list>)> >return> > my_list>=> [>'E'>]> num>=> 6> print>(>'number before='>, num)> call_by_value(num)> print>(>'after function num value='>, num)> print>(>'list before'>,my_list)> call_by_reference(my_list)> print>(>'after function list is '>,my_list)>

>

>

Sortir

  number before= 6    in function value updated to 12    after function num value= 6    list before ['E']    in function list updated to ['E', 'D']    after function list is ['E', 'D']>

Dans le code ci-dessus, nous avons montré comment Python utilise le concept d'objet d'appel par référence dans son programme.

On passe un entier dans la fonction call_by_value(). Les entiers sont des objets immuables, donc Python fonctionne selon l'appel par valeur, et les modifications apportées à la fonction ne sont pas reflétées en dehors de la fonction.

Nous passons ensuite la liste à la fonction par référence. Dans la fonction call_by_reference(), nous transmettons une liste qui est un objet mutable. Python fonctionne selon l'appel par référence dans cette fonction et les modifications apportées à l'intérieur de la fonction peuvent également être vues en dehors de la fonction.

La variable n'est pas l'objet

Ici, a est une variable qui pointe vers une liste contenant les éléments X et Y. Mais a en soi n'est pas une liste. Considérez a comme un bucket contenant les objets X et Y.

 a = ['X', 'Y']>

première recherche en profondeur de l'algorithme

Qu’est-ce que le passage par référence en Python ?

Passer par référence signifie que vous devez passer la fonction (référence) à une variable, ce qui signifie que la variable existe déjà en mémoire.

Ici, la variable (le bucket) est transmise directement à la fonction. La variable agit comme un package fourni avec son contenu (les objets).

Dans l'image de code ci-dessus, list et my_list sont la même variable de conteneur et font donc référence au même objet dans la mémoire. Toute opération effectuée par la fonction sur la variable ou l'objet sera directement reflétée par l'appelant de la fonction. Par exemple, la fonction pourrait complètement changer le contenu de la variable et la pointer vers un objet complètement différent :

mysql liste tous les utilisateurs

En outre, la fonction peut réaffecter le contenu de la variable avec le même effet que ci-dessous :

Pour résumer, en passage par référence, la fonction et l'appelant utilisent la même variable et le même objet.

Passer par référence dans un exemple Python

Dans cet exemple, la fonction modifier_list prend une liste par référence. La fonction ajoute la chaîne Geeks à la liste transmise à l'intérieur de la fonction et l'imprime. Étant donné que les listes sont des types de données mutables, les modifications apportées à la liste à l'intérieur de la fonction sont également reflétées en dehors de la fonction, comme vous pouvez le voir dans la sortie.

Python3




def> modify_list(x):> >x.append(>'Geeks'>)> >print>(>'Inside function:'>, x)> > my_list>=> [>'Geeks'>,>'for'>]> modify_list(my_list)> print>(>'Outside function:'>, my_list)>

>

>

Sortir

  Inside function: ['Geeks', 'for', 'Geeks']    Outside function: ['Geeks', 'for', 'Geeks']>

Qu’est-ce que le passage par valeur en Python ?

Dans cette approche, nous passons une copie de le variables réelles dans la fonction en tant que paramètre. Par conséquent, toute modification des paramètres à l’intérieur de la fonction ne sera pas reflétée dans la variable réelle.

définir l'intervalle javascript

Il en est de même pour toute opération effectuée par la fonction sur la variable ou l'objet

Pour résumer, les copies des variables et des objets dans le contexte de l'appelant de la fonction sont complètement isolées.

Passer par valeur dans un exemple Python

Ici, nous passerons l'entier x à la fonction qui est un type de données immuable. Nous mettons ensuite à jour la valeur de l'entier à l'intérieur de la fonction et imprimons la valeur mise à jour. Les modifications ne sont pas visibles en dehors de la fonction car les entiers sont des types de données immuables.

Python3




def> modify_integer(x):> >x>=> x>+> 10> >print>(>'Inside function:'>, x)> > x>=> 5> print>(>'Before function call:'>, x)> modify_integer(x)> print>(>'After function call:'>, x)>

>

quelle collection en java
>

Sortir:

  Before function call: 5    Inside function: 15    After function call: 5>

La programmation Python utilise le concept d'objet de référence lors de la transmission des valeurs aux fonctions. Cet article tente de vous montrer le concept de passage par valeur et de passage par référence en Python. Nous avons montré différents cas de transmission de valeurs avec des exemples. La transmission de valeurs à une fonction en Python est différente des autres langages de codage, mais avec ce didacticiel, vous pouvez facilement comprendre le concept et l'implémenter dans votre travail.

Lire aussi :

Python est-il appelé par référence ou par valeur