Python · Intermediário · Português · Técnico
valor padrão mutável
Armadilha clássica: usar lista, dicionário ou outro objeto mutável como valor padrão de parâmetro. O valor é criado uma só vez, na definição da função, e compartilhado entre chamadas.
Onde usar
Gera bugs em que dados de uma chamada vazam para a próxima. A correção idiomática é usar None como padrão e criar o objeto dentro da função.
Em código
def somar(x, lista=[]):
lista.append(x)
return lista
print(somar(1), somar(2))
# [1, 2] [1, 2] (bug)Exemplos
Esse bug veio de uma lista como valor padrão mutável.
O linter reclamou do valor padrão mutável no parâmetro.
Cuidado
Não confunda com variável global: o valor padrão vive no objeto função e acumula as mudanças de todas as chamadas.
Sinônimos
argumento padrão mutável