Passer par référence vs. Valeur en python

Passer par référence vs. Valeur en python
Après avoir connu Python, vous pouvez trouver des cas où les fonctions ne modifient pas les arguments à un endroit comme vous le feriez sur. De nombreuses langues utilisent des arguments de méthode comme références, définies comme passant par référence aux variables actuelles. Si vous êtes un développeur avancé Python qui veut saisir la façon particulière de Python de traiter les arguments de la méthode, alors ce guide est vraiment pour vous.

Python prend en charge le passage par référence d'objet

Pass-by-Reference et Pass-by-Value sont indéniablement les deux façons les plus bien reconnues et facilement compréhensibles de passer des paramètres entre les langages de programmation. Python est, malheureusement, «pas-par-objet-référence», ni «passer par valeur» ni «passer par référence», souvent qualifié de «appel par référence d'objet» ainsi que «appel en partageant.«Il est utile de regarder de plus près le concept lui-même en le divisant en segments pendant que vous plongez dans les spécificités techniques du passage par référence:

Passer: Cela signifie fournir une méthode avec un argument.

Par référence: Cela signifie que l'argument que vous passez à la méthode fait référence à une variable qui réside désormais dans le stockage au lieu d'une réplique différente de cette variable.

Lorsque vous attribuez la méthode une référence à une variable définie, la variable à laquelle il correspond serait explicitement influencée par toutes les opérations sur cette référence. Maintenant, considérons un exemple de la façon dont, en pratique, cela fonctionne. Dans cet exemple, nous avons défini une variable 'arg ' avoir une valeur de 4. Tout au long de ce scénario, la variable 'arg ' n'a pas été modifié à sa place. Python semble gérer votre argument fourni au lieu d'une référence à une variable actuelle comme une valeur autonome.

Cela signifierait que par référence, Python déplace les arguments par valeur? Python déplace les arguments par l'attribution, donc ni par référence ni en valeur. La logique est double:

Actuellement, le paramètre qui passe est un pointeur vers un objet. Certains types de données sont mutables et certains ne sont pas mutables.

Si nous déplacons un objet mutable dans une fonction, la fonction acquiert une référence au même objet afin que vous puissiez tout muter à la satisfaction de votre âme; Cependant, la portée externe ne saurait rien avant de rejoindre la référence dans la fonction. Une fois que vous avez terminé, la référence externe ne visera que l'objet réel. Si vous déplacez un objet immuable vers une fonction, la référence externe ne peut toujours pas être retelée et vous ne pouvez pas simplement muter l'objet. Pour rendre les choses beaucoup plus simples, comprenons un par un.

Passer par référence

Tout d'abord, vous devez comprendre que la variable «MyList» elle-même n'est pas une liste mais fait référence à une liste ayant des valeurs. Vous pouvez appeler la variable 'Mylist' un conteneur ayant des valeurs. Les valeurs de liste sont des objets. La variable `` MyList '' a été directement livrée dans la fonction avec son contenu.

«List» et «Ma liste» semblent être la même variable de stockage dans l'exemple de code ci-dessous et s'appliquent ainsi à la même objet de stockage. C'est pourquoi sur la sortie, il imprime 'Saeed.'

Toute action effectuée sur la variable ou l'entité serait immédiatement reflétée par la méthode de l'appelant. La méthode peut entièrement modifier la valeur de la variable et la viser à un objet entièrement distinct. Comme vous pouvez le voir dans la fonction 'set_list'.'En effet, nous avons retourné la liste modifiée et l'avons imprimée à la même ligne que l'appelant.

La méthode peut également réaffecter les éléments de la variable pour le même résultat que ci-dessous. Vous pouvez voir que nous avons ajouté une nouvelle valeur à la liste, et le changement a été reflété. Nous avons ajouté une chaîne unique à une liste et l'avons renvoyée à l'appelant. Pour conclure, la méthode et l'appelant ont utilisé la même variable et l'objet tout au long de la relation pass-by.

Passer par valeur

Grâce à Pass by Value, la méthode est fournie avec un double de l'objet argument. Cela garantit que l'élément d'origine reste inchangé et que toutes les modifications apportées sont conservées à des emplacements de mémoire séparés dans une réplique du même objet.

Il est également valide avec toutes les opérations exécutées sur une variable ou l'entité par la méthode. Les doublons des variables et des objets dans la portée de la méthode de l'appelant sont entièrement séparés pour les résumer.

Passer l'objet par référence

Tout au long de cette situation, puisque Python est distinct, les méthodes de Python obtiennent la référence d'objet très similaire dans le stockage car l'appelant fait référence. Inversement, la technique n'obtient pas la variable «myList» (le conteneur). La méthode de l'appelant stocke le même objet; La méthode génère son conteneur et génère un index tout à fait frais pour lui-même, tout comme dans la valeur passante.

L'appelant et la méthode parlent du même objet dans le stockage, mais lorsque la méthode annexée applique un élément externe à une liste, l'entité de l'appelant est modifiée. Ils ont plusieurs étiquettes, mais ce sont les mêmes choses. Les deux variables contiennent un objet très similaire. C'est le sens de sa relation avec le déplacement par l'objet. Dans le stockage, la méthode et l'appelant utilisent un objet similaire tout en les attrapant à travers plusieurs variables. La variable de l'appelant (le conteneur) ne sera modifiée par aucune modification apportée à la variable de méthode (le conteneur); Seules les données ou le contenu sont modifiés.

Conclusion

Python fonctionne indépendamment des langues qui acceptent le déménagement par référence ou valeur des arguments. Les arguments de la méthode sont des variables locales qui ont été allouées à chaque valeur transférée à la méthode. Mais cela ne vous empêche toujours pas d'obtenir les mêmes résultats que vous trouveriez dans d'autres langues tout en déplaçant les arguments par proxy.