behavior difference for mutable and immutable variable in function definition

jianbing.chen at gmail.com jianbing.chen at gmail.com
Sat May 5 16:05:46 EDT 2007


On May 4, 5:14 pm, Carsten Haese <cars... at uniqsys.com> wrote:
> On Fri, 2007-05-04 at 14:30 -0700, jianbing.c... at gmail.com wrote:
> > Hi,
>
> > Can anyone explain the following:
>
> > Python 2.5 (r25:51908, Apr  9 2007, 11:27:23)
> > [GCC 4.1.1 20060525 (Red Hat 4.1.1-1)] on linux2
> > Type "help", "copyright", "credits" or "license" for more information.
> > >>> def foo():
> > ...     x = 2
> > ...
> > >>> foo()
> > >>> def bar():
> > ...     x[2] = 2
> > ...
>
> > >>> bar()
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> >   File "<stdin>", line 2, in bar
> > NameError: global name 'x' is not defined
>
> "x = 2" binds the name 'x' in foo's local namespace to the object '2'.
> For this, it doesn't matter whether the name 'x' was previously bound to
> anything.
>
> "x[2] = 2" is a shorthand notation for the method call
> "x.__setitem__(2,2)". This requires the name 'x' to be bound to some
> object that has a __setitem__ method.
>
> -Carsten

This makes sense.

Thank you.




More information about the Python-list mailing list