The import machinery works at 2 levels. First it loads and execute the module. So if it contains other imports, they are loaded (and executed) too. That means that the instruction
from datetime import datetime as dt
actually loads datetime (to be able to access datetime.datetime), and datetime.datetime. Because of that, datetime.timedelta is loaded too. In fact, it is required from datetime.datetime to be able to define the difference between 2 datetime.datetime objects. So everything has been loaded by the Python interpretor.
The second level imports symbols in the current namespace. At this level,
from datetime import datetime as dt
only creates the dt symbol in the namespace. That means that if you use directly datetime in your code, you will get a NameError because the symbol is undefined, but if you examine sys.module, you will find that it is there...