Maison >développement back-end >Tutoriel Python >Comment Python gère-t-il le passage par référence et le passage par valeur ?

Comment Python gère-t-il le passage par référence et le passage par valeur ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 01:29:10359parcourir

How Does Python Handle Pass-by-Reference and Pass-by-Value?

Pass-by-Reference en Python : une explication complète

En Python, la transmission d'arguments aux fonctions se fait par référence, ce qui signifie que le paramètre passé est une référence à l'objet réel. Cependant, il est important de comprendre la distinction entre passer une référence par valeur et passer réellement par référence.

Passer une référence par valeur

En Python, les paramètres sont passés par valeur, ce qui signifie une copie de l'objet est affecté au paramètre dans la fonction. Cela a deux implications :

  1. Objets mutables : Si l'objet transmis est mutable (c'est-à-dire que son contenu peut être modifié), les modifications apportées à l'objet dans la fonction seront reflétées dans l'objet d'origine en dehors de la fonction. En effet, le paramètre de fonction et l'objet d'origine font référence au même objet sous-jacent en mémoire.
  2. Objets immuables : Pour les objets immuables (c'est-à-dire dont le contenu ne peut pas être modifié), l'objet d'origine ne peut pas être modifié depuis la fonction. En effet, le paramètre de la fonction est une copie de l'objet d'origine et les modifications apportées à la copie n'affectent pas l'original.

Simulation du passage par référence en Python

Bien que le véritable passage par référence ne soit pas directement pris en charge en Python, il existe plusieurs techniques pour le simuler :

  1. Renvoyer le nouveau Valeur : Une fonction peut renvoyer une nouvelle valeur qui remplace l'objet d'origine dans le contexte appelant. Bien qu'il ne s'agisse pas strictement d'un passage par référence, cela permet une modification efficace de l'objet d'origine.
  2. Utiliser un wrapper : Une classe ou une liste wrapper peut être utilisée pour contenir l'objet et le transmettre par référence. Les modifications apportées à l'objet dans la fonction affecteront l'objet d'origine car le wrapper est passé par valeur, et non par l'objet lui-même.

Exemple :

Le code suivant illustre le passage -référence avec un mutable (liste) et un immuable (string):

# Mutable List
def modify_list(the_list):
    the_list.append('four')

outer_list = ['one', 'two', 'three']
print("Before: ", outer_list)
modify_list(outer_list)
print("After: ", outer_list)

# Immutable String
def modify_string(the_string):
    the_string = 'In a kingdom by the sea'

outer_string = 'It was many and many a year ago'
print("Before: ", outer_string)
modify_string(outer_string)
print("After: ", outer_string)

Sortie :

Before:  ['one', 'two', 'three']
After:  ['one', 'two', 'three', 'four']
Before:  It was many and many a year ago
After:  It was many and many a year ago

Comme on le voit dans la sortie, la liste est modifiée avec succès (passage par référence), tandis que la chaîne reste inchangée (passage -par valeur).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn