Mutable default values for function parameters

Erik Max Francis max at alcyone.com
Thu Oct 4 13:46:44 EDT 2001


sebastien wrote:

> I'd like to point something that is said in §4.7.1 of the tutorial:
> 
> "Important warning: The default value is evaluated only once. This
> makes a difference when the default is a mutable object such as a list
> or dictionary"
> 
> I think that this point is really difficult to understand. That means
> that parameters with mutable default value are global to all the calls
> of the function:
	...
> 
> This is a really confusing and I always fall in this sort of trap.
> Maybe a bad neuronal connection;-)

I avoid this problem by simply never using a mutable object as a default
argument, but instead always using a sentinel value that's substituted
in the function body:

	def sample(x, d = None):
	    if d is None:
	        d = []
	    d.append(x)
	    print d

To be honest, I can't remember ever running into this pitfall, since
I've used this pattern ever since I started using Python, and happened
to be made aware of the rule before encountering the wrong end of it.

-- 
 Erik Max Francis / max at alcyone.com / http://www.alcyone.com/max/
 __ San Jose, CA, US / 37 20 N 121 53 W / ICQ16063900 / &tSftDotIotE
/  \ Sanity is a cozy lie.
\__/ Susan Sontag
    Alcyone Systems' CatCam / http://www.catcam.com/
 What do your pets do all day while you're at work?  Find out.



More information about the Python-list mailing list