¿Por qué el diccionario vacío es un valor predeterminado peligroso en Python?

Puse llaves vacías como valor predeterminado para un argumento opcional para una función de Python, y pylint (usando el paquete Sublime) me dijo que era peligroso. ¿Alguien puede explicar por qué este es el caso? ¿Y es una mejor alternativa para usar Ninguno en su lugar?

Es peligroso solo si su función modificará el argumento. Si modifica un argumento predeterminado, persistirá hasta la próxima llamada, por lo que su dictado “vacío” comenzará a contener valores en llamadas que no sean la primera.

Sí, el uso de None es seguro y convencional en estos casos.

Veamos un ejemplo:

 def f(value, key, hash={}): hash[value] = key return hash print f('a', 1) print f('b', 2) 

El cual probablemente esperas que salga:

 {'a': 1} {'b': 2} 

Pero en realidad produce:

 {'a': 1} {'a': 1, 'b': 2}