Problem with global variables
Marc 'BlackJack' Rintsch
bj_666 at gmx.net
Fri Aug 8 15:22:54 EDT 2008
On Fri, 08 Aug 2008 13:10:48 -0400, Anthony Kuhlman wrote:
> I'm having trouble understanding the behavior of global variables in a
> code I'm writing. I have a file, test.py, with the following contents
>
> foo = []
>
> def goo():
> global foo
> foo = []
> foo.append(2)
>
> def moo():
> print foo
>
> In an ipython session, I see the following:
>
> In [1]: from test import *
>
> In [2]: foo
> Out[2]: []
>
> In [3]: goo()
>
> In [4]: foo
> Out[4]: []
>
> In [5]: moo()
> [2]
>
> I don't understand this behavior. I assumed that foo as defined in
> test.py is a global object, but that doesn't seem to be the case.
``global`` means module global. There's no really global namespace in
Python.
> The ipython session seems to be dealing with one copy of foo while
> goo() and moo() are using an entirely different copy.
The import binds the list from the module to the name `foo` in the
IPython namespace. When you call `goo()` it binds the name `foo` *within
the module* to a new list. This has of course no influence on the name
in the IPython namespace which is still bound to the list object that was
bound to `test.foo` before.
Ciao,
Marc 'BlackJack' Rintsch
More information about the Python-list
mailing list