importステートメントとfromステートメント

importステートメントによってアクセスできる属性は、全て共有されている。
fromステートメントはスコープへの変数がコピーされる。importのような共有は発生しない。


以下のようなpythonモジュールを用意する。
module0.py。

X = 0

module1.py。

X = 1

以下を実行した。

>>> import module0
module0
>>> import module1
module1
>>> module0.X
0
>>> module1.module0.X
0
>>> module1.module0.X = 10
>>> module1.module0.X
10
>>> module0.X
10

module1.module0.Xへの代入で、module0.Xの値が変化している。

>>> from module0 import X
>>> X
10
>>> X = 100
>>> X
100
>>> module0.X
10

Xへの代入は、module0.Xの値を変化させない。

fromステートメントで作成された変数はリロードされない

module0.pyを修正。

X = 1000

以下を実行。

>>> import imp
>>> imp.reload(module0)
<module 'module0' from 'module0.py'>
>>> module0.X
1000
>>> X
100

fromでできたXは値が書き換わっていない。
「初めてのPython」では、"リロードとfromステートメントを同時に使用すべきではありません"と記載されていた。