If you do
import foo (inside
import bar (inside
foo.py), it will work fine. By the time anything actually runs, both modules will be fully loaded and will have references to each other.
The problem is when instead you do
from foo import abc (inside
from bar import xyz (inside
foo.py). Because now each module requires the other module to already be imported (so that the name we are importing exists) before it can be imported.