I believe the behaviour you're seeking is almost exactly how mutable default arguments work in python: instantiated only during function definition.
def myfunc(x,*args,my_list=[]):
my_list.append(x)
The *args will protect the list from being overwritten by an erroneously passed second argument.