Maison >développement back-end >Tutoriel Python >Quel est l'impact du passage par affectation de Python sur les types mutables et immuables ?
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.
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.
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 :
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'.
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!