Please explain this strange Python behaviour

John Posner jjposner at
Thu Apr 30 15:59:10 CEST 2009

Duncan Booth wrote:
> Tim Chase <python.list at> wrote:
>> There _are_ cases where it's a useful behavior, but they're rare, 
>> so I don't advocate getting rid of it.  But it is enough of a 
>> beginner gotcha that it really should be in the Python FAQ at 
> That's an excellent idea!
> So excellent in fact that it already is:

A couple of minor quibbles:

* This writeup, and the virtually identical one at that Diez 
referenced, address the *what* of default arguments, but don't really 
address the *why*, beyond the statement that "Default values are created 
exactly once, when the function is defined (by executing the *def* 
<> statement)". After all, if parameter 
values are supplied to a function when it is called, a newly minted set 
of default values could be supplied at that time, also. So *why* was 
Python designed one way instead of the other?

* I'd change this sentence near the beginning of the writeup, because 
it's just ambiguous enough in the exact area that the writeup is 
attempting to clarify:


      The first time you call this function, D contains a single item.
      The second time, D contains two items ...


      After the first call to this function, D contains a single item.
      After the second call, D contains two items ...


More information about the Python-list mailing list