I found two similar questions in the mailing list, but I didn't understand the explanations.<div><br></div><div>I ran this code on Ubuntu 10.04 with Python 2.6.5.</div><div><br></div><div><div>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)?</div>
<div> <br></div><div><br></div><div><br></div><div># ---------------------------------------------------------------------- my code:</div><div>def gggg(a, L=[]):</div><div>    print "enter function"</div><div>    print "a = ", a, "and L = ", L</div>
<div>    if L == []:</div><div>        print "hey, L is empty"</div><div>        L = []</div><div>    L.append(a)</div><div>    print "after append, L = ", L</div><div>    return L</div><div><br></div>
<div>def g(a, L=[]):</div><div>    print "enter function"</div><div>    print "a = ", a, "and L = ", L</div><div>    if L == []:</div><div>        print "hey, L is empty"</div><div>
    L.append(a)</div><div>    print "after append, L = ", L</div><div>    return L</div><div><br></div><div>print gggg(3)</div><div>print gggg(4)</div><div>print gggg(7)</div><div>print g(3)</div><div>print g(4)</div>
<div>print g(7)</div></div><div><br></div><div><br></div><div><br></div><div><div># ---------------------------------------------------------------------- my output:</div></div><div><div>-------------------gggg calls</div>
<div>enter function</div><div>a =  3 and L =  []</div><div>hey, L is empty</div><div>after append, L =  [3]</div><div>[3]</div><div>enter function</div><div>a =  4 and L =  []</div><div>hey, L is empty</div><div>after append, L =  [4]</div>
<div>[4]</div><div>enter function</div><div>a =  7 and L =  []</div><div>hey, L is empty</div><div>after append, L =  [7]</div><div>[7]</div><div>-------------------g calls</div><div>enter function</div><div>a =  3 and L =  []</div>
<div>hey, L is empty</div><div>after append, L =  [3]</div><div>[3]</div><div>enter function</div><div>a =  4 and L =  [3]</div><div>after append, L =  [3, 4]</div><div>[3, 4]</div><div>enter function</div><div>a =  7 and L =  [3, 4]</div>
<div>after append, L =  [3, 4, 7]</div><div>[3, 4, 7]</div></div><div><br></div>