6
votes

Python Scoping mutable vs immuable

D'abord, je vais commencer comme tout le monde. Je suis nouveau à Python. Mon professeur m'a donné le problème: xxx

IT imprime: xxx

Je comprends qu'un reste à 10 car les entiers sont immuables, mais je Ne comprenez pas pourquoi B change et c non.


2 commentaires

Je soulignerais également que cela ne doit pas avoir à voir avec les types de données mutables / immuables. Comme les réponses ci-dessous indiquent, il s'agit d'une affectation variable. Le modèle de données Page Discutez cette différence.


Qu'est-ce que vous êtes déroutant, ce sont les noms de variables, je suppose. Donnez-les à l'extérieur de la fonction Noms différents I.E. X, Y, Z; Donc, vous voulez appeler f (x, y, z) et imprimer x, y, z. Et je suis sûr que ce ne sera pas si difficile à voir.


3 Réponses :


4
votes
def f(a, b, unused):
    a = 1
    b[0] = 2

0 commentaires

2
votes

La clé est de comprendre les variables comme des pointeurs sous la hotte: xxx

lorsque vous appelez F (A, B, C), seul B est effectivement modifié. La variable "C" à l'intérieur de la mise en œuvre de la fonction est différente de la mise en œuvre "C" en dehors de la fonction.


0 commentaires

1
votes

A ne conserve pas la valeur de 10 car elle est immuable. Il conserve la valeur de 10 car lorsque vous appelez a = 1 dans la portée locale de f () Vous créez une nouvelle variable.

Lorsque vous appelez c = b intérieur f () , le C B . Lorsque vous réaffectez les valeurs de cet objet mutable, le changement est reflété dans l'objet d'origine.


0 commentaires