I'm at the point in learning Python where I'm dealing with the Mutable Default Argument problem.
def bad_append(new_item, a_list=):
def good_append(new_item, a_list=None):
if a_list is None:
a_list = 
The default value of
a_list (or any other default value, for that matter) is stored in the function's interiors once it has been initialized and thus can be modified in any way:
>>> def f(x=): return x ... >>> f.func_defaults (,) >>> f.func_defaults is f()
So the value in
func_defaults is the same which is as well known inside function (and returned in my example in order to access it from outside.
IOW, what happens when calling
f() is an implicit
x = f.func_defaults. If that object is modified subsequently, you'll keep that modification.
In contrast, an assignment inside the function gets always a new
. Any modification will last until the last reference to that
 has gone; on the next function call, a new
 is created.
IOW again, it is not true that
 gets the same object on every execution, but it is (in the case of default argument) only executed once and then preserved.