Note: This post is pretty much only of interest (and will only make sense) to programmers.
I’ve been using Python a lot for around 6 months now, and just yesterday I run into an apparently common gotcha. I’ve boiled it down to a very basic example.
First, let’s define a simple function with a default argument:
def f( a = [] ): a.append(1) print a
Now, let’s call it twice and see what happens:
> f() [1] > f() [1, 1]
Probably not what you expected? From the POV of a C programmer, this just means that Python default arguments map to something like:
static int a[] = {};
rather than:
int a[] = {};
at the start of a function. (For those whom may not know; yes, C allows for static variables nested within functions.)