ExpertiDict

Python · Intermediário · Português · Técnico

valor padrão mutável

/va.ˈloɾ pa.ˈdɾɐ̃w mu.ˈta.vew/substantivo

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

Veja também

Todos os termos de Python