Function args
Michel Claveau/Hamster
No.Spam.mc at No.Spam.mclaveau.No.Spam.com
Fri Apr 9 03:36:19 EDT 2004
Re
Je redis : en Python, les objets ne sont pas modifiables (sauf listes et
dictionnaires).
En faisant :
c = b
b = a
a = c
Cela veut dire :
- c=b création d'un objet auquel on affecte la valeur b, avec une variable
c qui pointe dessus
- b=a création d'un objet auquel on affecte la valeur a, avec une variable
b qui pointe dessus
- a=c création d'un objet auquel on affecte la valeur c, avec une variable
a qui pointe dessus
Donc, au résultat, on aura bien eu un échange des valeurs, mais avec
création d'objets.
D'ailleurs, on peut suivre ce qui se passe, avec id() qui donne
l'identifiant unique d'un objet.
a=2
print id (a)
a=3
print id(a)
a+=1
print id(a)
On voit bien qu'il y a création d'un nouvel objet 'a' à chaque affectation.
Il faut comprendre qu'il y a deux notions :
- en Python, une variable est toujours une référence (à un objet)
- les objets ne sont pas modifiables (sauf listes et dictionnaires)
Si tu veux vraiment utiliser des objets modifiables, passe par une liste, ou
un dictionnaire.
Exemple avec un dictionnaire :
def permut(x,y):
d[x],d[y]=d[y],d[x]
d={'a':2, 'b':3}
print d['a'],d['b']
print id(d['a']),id(d['b'])
permut('a','b')
print d['a'],d['b']
print id(d['a']),id(d['b'])
On voit bien, ici, grâce a "id()", qu'ici, il y a eu échange des adresses
(référence) des éléments internes du dictionnaire.
Ce système de gestion des objets par référence, dans Python, est assez
fabuleux, car une variable peut référencer n'importe quel objet : un nombre,
une fonction, un dictionnaire, une liste de liste de liste, une classe, etc.
Les possibilités deviennent inouïes. Mais il faut bien maîtriser les notions
d'abord.
@-salutations
Michel Claveau
More information about the Python-list
mailing list