empty словарь в качестве значения по умолчанию для аргумента ключевого слова в функции Python: словарь не инициализируется {} при последующих вызовах? [Дубликат]

На этот вопрос уже есть ответ:

numpy массив подкласс нечетким образом разделяет атрибуты между экземплярами 1 ответ

Вот функция. Я намерен использовать значения по умолчанию для аргумента ключевого слова, чтобы сделать словарь пустым, если он не указан.

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

Но когда я в следующий раз позвоню, я получу:

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

Похоже, ключевое слово аргумент d при втором вызове указывает не на пустой словарь, а на словарь, который был оставлен в конце предыдущего вызова. Число x сбрасывается до трех при каждом вызове.

Теперь я могу обойти это, но я бы хотел, чтобы вы помогли понять это. Я полагал, что аргументы ключевого слова находятся в локальной области действия функции и будут удалены после того, как функция вернется. (Извините и исправьте мою терминологию, если я неточен.)

Так что локальное значение, на которое указывает имя d, должно быть удалено, и при следующем вызове, если я не предоставлю ключевое слово аргумент d, тогда d должно быть установлено вdefault {}. Но, как вы можете видеть, d устанавливается в словарь, на который указывал d в предыдущем вызове.

Что происходит

Этоliteral {} в строке def во вложенной области видимости?

Такое поведение наблюдается в 2.5, 2.6 и 3.1.

Ответы на вопрос(1)

Ваш ответ на вопрос