Rami Chowdhury wrote: > Hi Nitin, > > On Sat, Nov 28, 2009 at 14:36, MRAB <pyt...@mrabarnett.plus.com> wrote: >> Nitin Changlani. wrote: >>> three.py >>> ------------ >>> import one >>> import two >>> >>> def argFunc(): >>> one.x = 'place_no_x' >>> one.a = 'place_no_a' >>> one.b = 'place_no_b' >>> > > I think this is what is biting you. You might expect that after > argFunc, one.x would be set to 'place_no_x' and so on. However, > Python's scoping doesn't work like that -- the name one.x is only > rebound in the function's scope, so outside of argFunc (e.g. in your > main printing code) one.x is still bound to 'place_x'. > > HTH, > Rami
Not true. argFunc does not rebind the name "one", it mutates the module object referred to by the name "one". Since there is only one instance of a given module*, the change is indeed reflected everywhere the "one" module is accessed. The problem is that argFunc does not modify (or replace) one.myList, as MRAB said. * Unless you do something strange like reload() or editing sys.modules or having module available under different names...or something. -- Matt Nordhoff -- http://mail.python.org/mailman/listinfo/python-list