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
Libérer: 2025-01-01 02:49:10
original
356 Les gens l'ont consulté

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'
Copier après la connexion

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

PassByReference()
Copier après la connexion

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')
Copier après la connexion

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'
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal