Python module重複載入的問題

測試環境準備:

1、在site-packages下新建一個用於測試的包,包含如下文件

2、文件的內容:

a.py

# -*- coding:utf-8 -*-

from __future__ import print_function, unicode_literals, division
from future_builtins import *

print('initializing a')

if '__main__' == __name__:
    pass

b.py

# -*- coding:utf-8 -*-

from __future__ import print_function, unicode_literals, division
from future_builtins import *

from import_test import a
import a, c

if '__main__' == __name__:
    pass

c.py

# -*- coding:utf-8 -*-

from __future__ import print_function, unicode_literals, division
from future_builtins import *

from import_test import a
import a

if '__main__' == __name__:
    pass

在命令行上執行python b.py,出現如下結果:

爲什麼會這樣?從過程來看,就是from...import和import找到的module被python認爲是兩個玩意,所以初始化了兩次(代碼中from...import和import分別執行了兩次,a一共被import四次,只是被同樣語句import進來的module被緩存了,所以只初始化了兩次)。

項目中遇到這種情況一定要小心,重複初始化module浪費內存只是小事,要是module的邏輯過於複雜而導致什麼莫名其妙的bug那才叫杯具。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章