Maison >développement back-end >Tutoriel Python >Quel est l'impact du passage par affectation de Python sur les types mutables et immuables ?

Quel est l'impact du passage par affectation de Python sur les types mutables et immuables ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-01 02:49:10336parcourir

How Does Python's Pass-by-Assignment Impact Mutable and Immutable Types?

Passage par référence vs. Passage par valeur

Lors du passage d'une variable à une fonction en Python, l'argument est toujours passé par affectation. Cela signifie que le paramètre dans la fonction est une référence à l'objet qui est transmis.

Cependant, puisque Python fait la distinction entre les types mutables et immuables, le comportement des variables transmises diffère :

Types mutables :
Pour les types mutables, le paramètre transmis fait référence au même objet qui a été transmis. Les modifications apportées à l'objet dans la fonction sont reflétées dans la portée externe.

Types immuables :
Pour les types immuables, le paramètre transmis est une copie de l'objet qui a été transmis. Toutes les modifications apportées à l'objet dans la fonction sont non reflété dans la portée externe.

Exemple :

Considérez ce Python class :

class PassByReference:
    def __init__(self):
        self.variable = 'Original'
        self.change(self.variable)
        print(self.variable)

    def change(self, var):
        var = 'Changed'

Lorsqu'une instance de cette classe est créée :

PassByReference()

La sortie est « Original ». En effet, le paramètre « var » dans la méthode « change » est une copie de l'attribut « variable » dans la portée externe. Par conséquent, la modification de 'var' dans la méthode n'a aucun effet sur la 'variable' d'origine.

Réalisation du passage par référence pour les types immuables

Pour obtenir un comportement de passage par référence pour les types immuables, des techniques telles que le retour d'une nouvelle valeur ou l'utilisation d'un wrapper peuvent être utilisées :

Renvoyer une nouvelle valeur Valeur :

def change_immutable(parameter):
    new_parameter = 'Changed'
    return new_parameter

result = change_immutable('Original')

Dans ce cas, la fonction 'change_immutable' renvoie une nouvelle valeur, qui est ensuite affectée à la variable 'result'.

Utilisation d'un Wrapper :

class ImmutableWrapper:
    def __init__(self, value):
        self.value = value

def change_immutable_wrapper(wrapper):
    wrapper.value = 'Changed'

immutable_wrapper = ImmutableWrapper('Original')
change_immutable_wrapper(immutable_wrapper)
print(immutable_wrapper.value)  # Outputs 'Changed'

Dans cette approche, un wrapper d'objet est utilisé pour contenir la valeur immuable. Les modifications apportées à la valeur du wrapper sont reflétées dans la portée externe.

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