Passer par référence vs valeur en Python

Pass Reference Vs



Après avoir connu Python, vous pouvez trouver des cas où les fonctions ne modifient pas les arguments à un endroit comme vous l'auriez prévu, en particulier si vous connaissez de nombreux autres langages informatiques. De nombreux langages utilisent des arguments de méthode comme références, définis comme passant par Reference aux variables courantes. Si vous êtes un développeur Python avancé qui souhaite comprendre la manière particulière de Python de traiter les arguments de méthode, alors ce guide est vraiment pour vous.

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

Le passage par référence et le passage par valeur sont indéniablement les deux manières les plus reconnues et les plus facilement compréhensibles de passer des paramètres entre les langages de programmation. Python est, malheureusement, « référence de passage par objet », ni passage par valeur ni passage par référence, souvent appelé appel par référence d'objet ainsi qu'appel par partage. 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 :







Passe: cela signifie fournir une méthode avec un argument.



Par référence: cela signifie que l'argument que vous déplacez vers la méthode fait référence à une variable qui réside maintenant 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 elle correspond sera explicitement influencée par toutes les opérations sur cette référence. Considérons maintenant un exemple de la façon dont, dans la pratique, cela fonctionne. Dans cet exemple, nous avons défini une variable ' en colère' ayant une valeur de 4 . Tout au long de ce scénario, la variable ‘ en colère' n'a pas été modifié à sa place. Python semble gérer votre argument fourni au lieu d'une référence à une variable actuelle en tant que valeur autonome.





Cela signifierait-il qu'au lieu de par référence, Python déplace les arguments par valeur ? Python déplace les arguments via l'affectation, donc ni par référence ni par valeur. La logique pour cela est double :



Actuellement, le paramètre transmis est un pointeur vers un objet. Certains types de données sont modifiables et d'autres ne le sont pas.

Si nous déplaçons 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 que vous rejoigniez 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 re-lié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 contenant des valeurs. Les valeurs de la liste sont des objets. La variable 'mylist' a été directement livrée dans la fonction avec son contenu.

List & my list semblent être la même variable de stockage dans l'exemple de code ci-dessous et s'appliquent donc au même objet de stockage. C'est pourquoi à la sortie, il imprime 'Saeed'.

Toute action effectuée sur la variable ou l'entité serait immédiatement reflétée dans la méthode de l'appelant. La méthode peut modifier entièrement la valeur de la variable et la viser vers un objet tout à fait distinct. Comme vous pouvez le voir dans la fonction 'set_list', nous avons modifié le contenu de la liste et imprimé une toute nouvelle liste ayant l'élément 'Aqsa'. C'est parce que nous avons renvoyé la liste modifiée et l'avons imprimée sur 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 que 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 le même objet tout au long de la relation de passage.

Passer par valeur

Grâce au passage par valeur, la méthode est fournie avec un duplicata de l'objet argument que l'appelant lui attribue. Cela garantit que l'élément d'origine reste inchangé et que toutes les modifications apportées sont conservées dans des emplacements mémoire séparés dans une réplique du même objet.

Il est également valable avec toutes les opérations exécutées sur une variable ou l'entité par la méthode. Les doublons de variables et d'objets dans la portée de la méthode appelante 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 à celle à laquelle l'appelant se réfère. A l'inverse, la technique n'obtient pas la variable « mylist » (le conteneur). La méthode caller stocke le même objet ; la méthode génère son conteneur et génère un index tout à fait nouveau pour le sien, tout comme dans le pass-by-value.

L'appelant et la méthode parlent du même objet dans le stockage, mais lorsque la méthode ajoutée applique un élément externe à une liste, l'entité appelante 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 derrière sa relation au déplacement par l'objet. Dans le stockage, la méthode et l'appelant utilisent un objet similaire tout en les interceptant via plusieurs variables. La variable appelante (le conteneur) ne sera pas modifiée par les modifications apportées à la variable de méthode (le conteneur) ; seules les données ou le contenu sont modifiés.

Conclusion

Python fonctionne indépendamment des langages qui acceptent le déplacement par référence ou valeur d'arguments. Les arguments de méthode sont des variables locales qui ont été affecté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 des arguments par procuration.