On Thu, Oct 21, 2010 at 2:36 PM, Sean Choi <gne...@gmail.com> wrote: > I found two similar questions in the mailing list, but I didn't understand > the explanations. > I ran this code on Ubuntu 10.04 with Python 2.6.5. > Why do the functions g and gggg behave differently? If calls gggg(3) and > g(3) both exit their functions in the same state, why do they not enter in > the same state when I call gggg(4) and g(4)? > > # ---------------------------------------------------------------------- my > code: > def gggg(a, L=[]):
This is a common newbie stumbling-block: Don't use lists (or anything mutable) as default argument values (in this case, for L); a new list is *not* created for every function invocation, they'll all share the *exact same list object*. Use None and then create a fresh list (or what have you) in the function body. See http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm > print "enter function" > print "a = ", a, "and L = ", L > if L == []: > print "hey, L is empty" > L = [] The previous line is why the two functions' behaviors differ (g() lacks this line). Read the above FAQ, and then carefully trace through the execution of the functions; the difference will then be clear. Cheers, Chris -- http://blog.rebertia.com > L.append(a) > print "after append, L = ", L > return L > def g(a, L=[]): > print "enter function" > print "a = ", a, "and L = ", L > if L == []: > print "hey, L is empty" > L.append(a) > print "after append, L = ", L > return L -- http://mail.python.org/mailman/listinfo/python-list