On Saturday, June 11, 2016 at 8:13:50 PM UTC-4, Marcin Rak wrote: > On Saturday, 11 June 2016 19:09:29 UTC-5, MRAB wrote: > > On 2016-06-12 00:50, Random832 wrote: > > > On Sat, Jun 11, 2016, at 19:44, Marcin Rak wrote: > > >> So my question is, how the heck is it possible that I get 5 as the last > > >> value printed? the global test_var (global to Test.py) I set to 44 when I > > >> ran some_function()??? does anyone have a clue they could throw my way? > > > > > > Importing a variable from a module copies its value into your own > > > module's variable. Updates to the source module's variable will not be > > > reflected in your module. > > > > > Not true. Importing doesn't copy the value. > > > > Importing a name creates a new name in the local scope that refers to > > the same object that the imported name referred to. > > If that's the case, how is it that I get 5 for test_var???
Assignment makes a name refer to a value: x = 12 # Now x refers to 12 More than one name can refer to a value: x = 12 y = x # Now x and y both refer to 12 Re-assigning one name doesn't affect other names referring to the old value: x = 12 y = x x = 24 # Now x refers to 24, and y still refers to 12 Each module has its own globals (this makes the name "global" a bit of a misnomer. Importing a name from a module is an assignment statement in disguise, and each module has its own names: # Test.py test_var = 5 # Solver.py from Test import test_var # This import is effectively: # Solver.test_var = Test.test_var # # Now Test.test_var and Solver.test_var both refer to 5 Reassigning one name doesn't affect other names referring to the old value: # Test.py global test_var test_var = 44 # Test.test_var refers to 44 # Solver.test_var still refers to 5 After all of your code is run, the test_var in Solver.py is still 5. A longer explanation is at http://bit.ly/pynames1 that may help. --Ned. -- https://mail.python.org/mailman/listinfo/python-list