пустой словарь как значение по умолчанию для аргумента ключевого слова в функции python: словарь, кажется, не инициализируется {} при последующих вызовах?

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

>>> 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 устанавливается в словарь, указанный в предыдущем вызове.

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

Является ли literal {} в строке def в области приложения?

Такое поведение видно из 2.5, 2.6 и 3.1.

Python - лучший язык программирования в мире.