Comme le titre l'indique, j'expliquerai la raison.
J'ai fait la fonction suivante. À première vue, je pense que tout problème réside dans le contenu.
def A_fnc (b=dict()):
b["xxx"]=12
return b
#Je vais l'utiliser comme ça
aa=A_fnc()
bb=A_fnc()
aa["yyy"]=11
print(aa)
print(bb)
Pour une raison quelconque ... La sortie est la suivante.
{'xxx': 12, 'yyy': 11}
{'xxx': 12, 'yyy': 11}
Les deux ont le même contenu.
Remarque: Pourquoi les valeurs par défaut sont-elles partagées entre les objets? https://docs.python.org/ja/3/faq/programming.html#id14
Il est facile de s'attendre à ce qu'un appel de fonction crée un nouvel objet pour la valeur par défaut. En fait, ce n’est pas le cas. La valeur par défaut n'est générée qu'une seule fois lorsque la fonction est définie. Comme dans le dictionnaire de cet exemple, lorsque cet objet est modifié, les appels de fonction suivants font référence à l'objet modifié.
Pour le moment, j'ai fait ce qui suit.
def A_fnc(b=False):
if(not b):b=dict()
b["xxx"]=12
return b
aa=A_fnc()
bb=A_fnc()
aa["yyy"]=11
print(aa)
print(bb)
#{'xxx': 12, 'yyy': 11}
#{'xxx': 12}
Pour le moment, c'est la solution
A souligné M. @shiracamus. Merci beaucoup.
Recommended Posts