A default value is bound at function definition time. This is a common "gotcha" when assigning dictionaries or lists as defaults.
For some additional detail, see this blog post, which has a section on mutable default values.
You can think of it as creating the object and binding it to the formal parameter name when the python interpreter first sees the function definition. From that point forward, when the function is invoked, that same mutable object is provided to the function if no user-supplied value is present.
It is certainly a surprise at first, but fits into the way python does things.