Wie der Titel schon sagt, werde ich den Grund erklären.
Ich habe die folgende Funktion gemacht. Auf den ersten Blick habe ich das Gefühl, dass jedes Problem im Inhalt liegt.
def A_fnc (b=dict()):
b["xxx"]=12
return b
#Ich werde es so benutzen
aa=A_fnc()
bb=A_fnc()
aa["yyy"]=11
print(aa)
print(bb)
Aus irgendeinem Grund ... Die Ausgabe ist wie folgt.
{'xxx': 12, 'yyy': 11}
{'xxx': 12, 'yyy': 11}
Beide haben den gleichen Inhalt.
Hinweis: Warum werden Standardwerte von Objekten gemeinsam genutzt? https://docs.python.org/ja/3/faq/programming.html#id14
Es ist leicht zu erwarten, dass ein Funktionsaufruf ein neues Objekt für den Standardwert erstellt. Eigentlich ist das nicht der Fall. Der Standardwert wird nur einmal generiert, wenn die Funktion definiert ist. Wie im Wörterbuch in diesem Beispiel beziehen sich nachfolgende Funktionsaufrufe beim Ändern dieses Objekts auf das geänderte Objekt.
Vorläufig habe ich Folgendes getan.
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}
Dies ist vorerst die Lösung
Herr @ Shiracamus wies darauf hin. Vielen Dank.
Recommended Posts