Ne spécifiez pas un objet mutable (type de liste, type de dictionnaire, etc.) comme valeur initiale de l'argument de fonction de python.

Contexte

Comme le titre l'indique, j'expliquerai la raison.

Contenu

phénomène

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.

Cause

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é.

Solution

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

référence

A souligné M. @shiracamus. Merci beaucoup.

Recommended Posts

Ne spécifiez pas un objet mutable (type de liste, type de dictionnaire, etc.) comme valeur initiale de l'argument de fonction de python.
Comment écrire un type liste / dictionnaire de Python3
[python] Valeur de l'objet fonction (?)
[Python] Utiliser les données au format JSON comme objet de type dictionnaire
Extraire la valeur de dict ou list sous forme de chaîne de caractères
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
Si vous donnez une liste avec l'argument par défaut de la fonction ...
[Python] Qu'est-ce qu'un argument formel? Comment définir la valeur initiale
[Python3] Réécrire l'objet code de la fonction
[python] [meta] Le type de python est-il un type?
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Remarque: Signification de spécifier uniquement * (astérisque) comme argument dans la définition de fonction de Python
Annoncer les prévisions météorologiques (pluie, etc.) par DM dans le cadre de la fonction de bot
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!
[Python of Hikari-] Chapitre 06-02 Fonction (argument et valeur de retour 1)
Spécifiez une sous-commande comme argument de ligne de commande en Python
[Python] Calculez la valeur moyenne de la valeur de pixel RVB de l'objet
Résumé du tri Python (liste, type de dictionnaire, série, DataFrame)
Python: obtenir une liste de méthodes pour un objet
Différent du type d'importation de python. Signification de depuis A import B
Obtenez le nombre d'éléments spécifiques dans la liste python
[Python] Erreur de type: 'in <string>' nécessite une chaîne comme opérande de gauche, pas une liste
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Python: créer un dictionnaire à partir d'une liste de clés et de valeurs
Le websocket de toio (nodejs) et python / websocket ne se connecte pas.
2015-11-26 python> Afficher la liste des fonctions du module> import math> dir (math)
Extraire la valeur la plus proche d'une valeur à partir d'un élément de liste en Python
Python> l'argument par défaut n'initialise pas l'objet mutable (par exemple la liste) / car il est initialisé à la définition
Note addictive: max (max (list)) ne doit pas être utilisé lors de la maximisation de la valeur d'un tableau à deux dimensions
La liste Python n'est pas une liste
Lors de l'incrémentation de la valeur d'une clé qui n'existe pas
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
Format lors du passage d'une longue chaîne comme argument de python
[Python] Temps d'exécution lorsqu'une fonction est saisie dans une valeur de dictionnaire
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Utilisation de lambda (lors du passage d'une fonction comme argument d'une autre fonction)
python Remarque: map -faire la même chose pour chaque élément de la liste
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 1)
Que faire lorsque le type de valeur est ambigu en Python?
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche