liste non effacée de la memoire à la fin d'une fonction
Bonjour à tous,
il y a un comportement de python que je ne comprend pas. J'aurais besoin de l'aide de plus calé que moi sur le sujet ;)
Le code ci dessous
Code:
1 2 3 4 5 6 7
| def f(p=[0]):
print(p)
p.append(1)
f()
f()
f() |
me renvoie
[0]
[0,1]
[0,1,1]
A chaque appel de la fonction, non seulement p n'est pas réinitialisé, mais en plus il garde la valeur qu'il avait lors de l'appel précédent.
Du coup, je ne comprend pas, je pensais qu'à la fin d'une fonction, toutes ses variables locales étaient éffacées. Pourquoi est-ce que lors de chaque appel, p pointe vers la même liste et pourquoi cette liste n'est pas effacée de la memoire à la fin de l'execution de f ?
De plus pourquoi la valeur par defaut p=[0] est-elle ignorée lors des second et troisième appel de f ?
Si on remplace p.append(1) par p=p+[1], le problème ne se pose plus. Le code renvoie bien [0],[0] et [0]
Merci d'avance