C'est normal, les arguments en Python sont toujours passés par valeur, pas par référence. Les valeurs en question sont des références, mais ces références ne peuvent être changées car elles sont passées par valeur. Pour les types mutables, on peut toutefois modifier la valeur référencée, mais pour les types immutables (comme les entiers ou les strings) c'est impossible. Je crois que c'est la même chose en Java, d'ailleurs.
Exemple:
Code :
- >>> def f(x): x += 1
- ...
- >>> a = 2
- >>> f(a)
- >>> a
- 2
- >>> def g(x): x[0] += 1
- ...
- >>> b = [2]
- >>> g(b)
- >>> b
- [3]
- >>> c = 2,
- >>> g(c)
- Traceback (most recent call last):
- File "<interactive input>", line 1, in ?
- File "<interactive input>", line 1, in g
- TypeError: object does not support item assignment
|
Le premier exemple fonctionne mais ne fait pas ce que tu attends, car c'est une copie de la variable locale à la fonction qui est incrémentée. Le deuxième exemple fonctionne car 'list' est un type mutable. Le troisième exemple ne fonctionne pas car 'tuple' est un type immutable...
Message édité par dividee le 12-06-2005 à 16:33:13