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