Commentaire sur Comment puis-je me déplacer en déclarant une variable inutilisée dans une boucle for?(Ran hors de la taille du commentaire)
Python conserve la même référence pour l'objet créé. (indépendamment de la mutabilité), par exemple,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Vous pouvez voir à la fois i et j, faire référence au même objet en mémoire. Que se passe-t-il lorsque nous modifions la valeur d'une variable immuable?
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
vous pouvez voir que j commence maintenant à pointer vers un nouvel emplacement (où 2 est stocké), et i pointe toujours vers l'emplacement où 1 est stocké. Lors de l'évaluation,
j = j+1
La valeur est choisie à partir de 142671248, calculée (si elle n'est pas déjà mise en cache) et placée à un nouvel emplacement 142671236. j est fait pour pointer vers le nouvel emplacement. En termes plus simples, une nouvelle copie est effectuée à chaque fois qu'une variable immuable est modifiée.
Mutabilité
Les objets mutables agissent peu différemment à cet égard. Lorsque la valeur pointée par
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Les deux points a et b pointent vers le même emplacement mémoire.
In [20]: a.append(5)
L'emplacement mémoire indiqué par a est modifié.
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
Les deux a et b, pointent toujours vers le même emplacement mémoire. En d'autres termes, les variables mutables agissent du même emplacement mémoire pointé par la variable, au lieu de faire une copie de la valeur pointée par la variable, comme dans le cas des variables immuables.