evaluated function defaults: stored where?

alex23 wuwei23 at gmail.com
Thu May 26 02:14:10 EDT 2005


David Isaac wrote:
> As a Python newbie I found this behavior quite surprising.

It can be even more surprising if a default value is mutable:

>>> def foo(a, b=[]):
... 	b.append(a)
... 	return b

>>> foo(3,[1,2])
[1, 2, 3]

>>> foo('c',['a','b'])
['a', 'b', 'c']

>>> foo(1)
[1]

So far, everything is behaving much as you'd expect, but then:

>>> foo(2)
[1, 2]

>>> foo(3)
[1, 2, 3]

The parameter is bound to the list at creation time and, being mutable,
is modifiable each time the function is called.

This can be avoided by modifying your function slightly:

>>> foo(3, [1,2])
[1, 2, 3]

>>> foo('c', ['a','b'])
['a', 'b', 'c']

>>> foo(1)
[1]

>>> foo(2)
[2]

>>> foo(3)
[3]

-alex23




More information about the Python-list mailing list