As described in the python documentation, when python see some import statement it does the following things:
- checks some global table if the module is already imported
- if the module is not there, python imports it, creates a module object and puts the newly created module object in the global table
- if the module is there, python just gets module object
 
- when python has the module object, it binds it to the name you chose
- if it was import foo, the name for the modulefoowill befoo
- if it was import foo as bar, the name for the modulefoowill bebar
- if it was from foo import bar as baz, python finds the function (or whatever)barin modulefooand will bind this function to the namebaz
 
So each module is imported only one time.
To better understand import mechanics, I would suggest creating a toy example.
File module.py:
print("import is in progress")
def foo():
    pass
File main.py:
def foo():
    print("before importing module")
    import module
    module.foo()
    print("after importing module")
 
if __name__ == '__main__':
    foo()
    foo()
Put the above files in the same directory. When module.py is being imported, it prints import is in progress. When you launch main.py, it will try to import module several times but the output will be:
before importing module
import is in progress
after importing module
before importing module
after importing module
So import really happens only once. You can adjust this toy example to check cases that are interesting to you.