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>