Bonjour,

J'ai un problème avec le système de surcharge lorsque l'un des élements clé est un dictionnaire.

Je ne sais même pas comment décrire le problème parce que je ne comprend pas du tout son origine, donc voici un exemple:

J'ai crée une fonction qui remplit le dictionnaire var en fonction d'un entier n.
Cette fonction crée des clés égales aux entiers de 0 à n (exclu) ayant pour valeurs ces mêmes entiers.
- Si la clé i existe déjà, la fonction affiche i == i
- Sinon elle affiche i <- i
- Si var n'est pas précisé, la fonction travaille (normalement) sur le dictionnaire vide {}


Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def fun(n, var = {}):
    print "\nCalling fun for n =", n
    for i in range(n):
        if i in var:
            print i, "==", i
        else:
            var[i] = i
            print i, "<-", i
    #del var
 
fun(2)
fun(5)
fun(5)
fun(5, var = {})
fun(5)
On remarque cependant que lorsque l'on ne précise pas le dictionnaire var, le dernier dictionnaire var crée est réutilisé.
Je trouvais cela bizarre et j'ai donc ajouté la ligne en commentaire (del var) détruisant le dictionnaire à la fin de la fonction, cela n'a rien changé.
Je me dis qu'il y a peut être un système de cache ou je ne sais pas...

Quelqu'un peut il m'expliquer ce qu'il se passe ?

Merci d'avance pour vos réponses.