Sharing package data across files
scottpakin1 at gmail.com
scottpakin1 at gmail.com
Tue Jun 28 20:02:18 EDT 2016
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
More information about the Python-list
mailing list