Python import 包的機制是import進來的和系統的module都放在sys.module
這個字典里面
多個py文件在import的時候,會先去sys.module
里面檢查是否已經import了,如果已經import了,就不再重復import,否則就import進來
from aaa.yyy import x
則不一樣,test.py中這樣from import
,此時x就是test自己命名空間中的變量。所以x只在test.py中有效,無論如何對x修改,都無法影響yyy中的x
也就是說
from yyy import x
等同於
improt yyy
x= yyy.x # 當你執行x=2時,完全影響不到yyy.x
所以,如果需要共享變量,就不要使用from yyy import x這種形式,而是使用import file,然后就可以通過yyy.x來使用,然后yyy.x='abc'可以進行修改。這樣處理全局性的變量就可以共享的。也就是保持一個獨立的namespace,這樣python不會再次導入,從而實現共享。
示例:
# 目錄樹
multi_module
│ main.py
│ val_sync.py
# val_sync.py
DICT = {
'a':1,
'b':2,
}
# main.py
import val_sync as mv
print(mv.DICT)
mv.DICT['c'] = 3
print(mv.DICT)
mv.DICT.pop('a')
print(mv.DICT)
python main.py
out:
{'a': 1, 'b': 2}
{'a': 1, 'b': 2, 'c': 3}
{'b': 2, 'c': 3}