dicionário vazio como valor padrão para o argumento de palavra-chave na função python: o dicionário parece não ter sido inicializado para {} nas chamadas subseqüentes? [duplicado

Esta pergunta já tem uma resposta aqui:

subclasse de matriz irregular compartilha inexplicavelmente atributos entre instâncias 1 resposta

Aqui está uma função. Minha intenção é usar os padrões de argumento de palavra-chave para tornar o dicionário um dicionário vazio, se não for fornecid

>>> def f( i, d={}, x=3 ) :
...     d[i] = i*i
...     x += i
...     return x, d
... 
>>> f( 2 )
(5, {2: 4})

Mas quando chamo f, recebo:

>>> f(3)
(6, {2: 4, 3: 9})

Parece que o argumento da palavra-chave d na segunda chamada não aponta para um dicionário vazio, mas para o dicionário que foi deixado no final da chamada anterior. O número x é redefinido para três em cada chamad

Agora posso resolver isso, mas gostaria da sua ajuda para entender isso. Eu acreditava que os argumentos das palavras-chave estão no escopo local da função e seriam excluídos assim que a função retornasse. (Desculpe e corrija minha terminologia se estiver sendo impreciso.)

Portanto, o valor local apontado pelo nome d deve ser excluído e, na próxima chamada, se eu não fornecer o argumento da palavra-chave d, d deve ser definido comodefault {}. Mas como você pode ver, d está sendo definido como o dicionário apontado na chamada anterior.

O que está acontecendo

É oliteral {} na linha de definição no escopo anexo?

Este comportamento é visto em 2.5, 2.6 e 3.

questionAnswers(1)

yourAnswerToTheQuestion