A.py
print("it is A")
B0.py
import A
print("It is B")
B1.py
import A
print("it is another B")
C.py
import B0
import B1
print("C")
那么结果就是
it is A
It is B
it is another B
C
我不明白这个结果。我认为是在下面。
""" my theory"""
it is A
It is B
it is A # <- twice
it is another B
C
因为A.py被B0和B1两次导入。所以我认为A的内容也必须运行两次。但事实并非如此。
我错过了什么?
亲切的人告诉我这篇文章。 What happens when a module is imported twice?
我读过,几乎没有帮助,但不是100%。 因为那个问题在同一对象中两次讨论了添加模块。
我的问题是添加具有相同模块的不同对象。
因此,我可以检查使用dir()导入的模块。
dir()结果如下,
['B0', 'B1', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
所以我通过print(dir(B0))和print(dir(B1))重新检查了每个模块 B0和B1 ['A','内置插件','缓存”,“ doc ”,“ 文件”,“ loader ”,“ 名称”,“ 软件包”,“ 规格”]
是的他们有相同的对象A .....哦,我有理论。 如果它们具有相同的A对象,我的意思是,B0和B1的id(A)是相同的,那么这完全可以理解。
等一下。我会运行它。
我尝试了
print(id(B1.A))
print(id(B0.A))
结果是
2298894767032
2298894767032
相同。是的他们指向同一个对象。这就是为什么打印A只运行1次的原因。