On Tuesday, June 28, 2016 at 5:20:16 PM UTC-6, John Pote wrote: > Correct me if I'm wrong but is not the above only true if bar has been > assigned to and thus references an imutable object? In your example the > string "oranges". > If bar has been assigned to a mutable object in module foo then every > module importing via "from foo import bar" will all import the name bar > pointing to the same mutable object. If this mutable obj is changed via > bar in one module then every other module importing bar will also see > the change. > eg > In module foo: > bar = ["apples","bananas","grapes"] > > In module bar1 > from foo import bar > bar[0] = "oranges" > > In module barx at some later time > from foo import bar > ... > print bar #prints ["oranges","bananas","grapes"]
That does seem to be the case. Making my example look like the above, with foo being assigned a list and bar mutating the first element of the list, indeed results in foo being updated: >>> from example import foo, bar >>> foo ['apples', 'bananas', 'grapes'] >>> bar() ['oranges', 'bananas', 'grapes'] >>> foo ['oranges', 'bananas', 'grapes'] > If my understanding here is correct then this would be a good case for > never directly writing to a globle. Use getter()s and setter()s to make > it obvious that any use of the setter() will be seen by all future calls > to the getter(). Yeah, it looks like I'll have to do more to my original (big) code than simply partition it into appropriate-sized chunks and drop it into a package directory. Oh, well. Thanks, -- Scott -- https://mail.python.org/mailman/listinfo/python-list