is it a bug ??

Paul Rubin phr-n2003b at NOSPAMnightsong.com
Wed Jan 29 16:10:58 EST 2003


brauner joel <jbrauner at wanadoo.fr> writes:
> def f(a=[]):
> 	print a
> 	if len(a)<5:
> 		a.append(1)
> 		f(a)
> 	print a
> 
> returns :
> 
> []
> [1]
> [1, 1]
> [1, 1, 1]
> [1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> [1, 1, 1, 1, 1]
> 
> In other words, the recursive function f seems to make the a list
> global for all the occurences of the function
> 
> is that normal ?

The problem is the default arg [] is evaluated only when f is defined,
not every time it's called.  So whenever you call f, you always get
the exact same list.  Once you've mutated the list, it stays mutated.




More information about the Python-list mailing list