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