Pourquoi ma valeur par défaut `def f(items=[])` garde les anciennes valeurs ?
asked 5 months ago198 viewsfr
3
def ajouter(x, items=[]):
items.append(x)
return items
print(ajouter(1)) # [1]
print(ajouter(2)) # [1, 2] ??
Pourquoi la liste n'est pas vide au deuxième appel ?
AI diagnosis
AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.
asked 5 months ago
Stéphanie Louis 2.9k
1 Answer
8
✓✓ Accepted answer
Les valeurs par défaut sont évaluées une seule fois, à la définition de la fonction, pas à chaque appel. Tous les appels partagent donc la même liste.
Le motif idiomatique :
def ajouter(x, items=None):
if items is None:
items = []
items.append(x)
return items
Même règle pour {}, set() ou tout objet mutable. Les linters (Ruff, règle B006) signalent ce piège automatiquement.
Sign in to tell others whether this worked.
answered 5 months ago
Marie Louis 2.2k
Sign in and verify your email to post an answer.