If I import a module, the module name shows up in both sys.modules and globals(). If I again delete it, it is removed from globals(), but still resides in sys.modules. Why is it so?
import mymodule
'mymodule' in globals() # True
'mymodule' in sys.modules # True
del mymodule
'mymodule' in globals() # False
'mymodule' in sys.modules # Still True, why?
I also found the following difference:
from mypackage import mymodule
'mypackage' in sys.modules # True
'mymodule' in sys.modules # False !
'mypackage.mymodule' in sys.modules # also True !
while the answers are complementary for globals():
'mypackage' in sys.modules # False
'mymodule' in sys.modules # True
'mypackage.mymodule' in sys.modules # False
Just like any other Python object, a module continues to exist until there are no more references to it. In other words,
sys.modulesbehaves like a regular dict, andsys.modulesis only consulted on import statements. You can delete a module fromsys.modulesto make Python reload it the next time it is imported.