Oh noooooh!
First, in any large program a particular module will be imported
dozens of times, so it would mean hundreds or thousands of extra stat
operations. There is also a lot of code around that imports a module
inside a function, possibly executing the import statement hundreds or
thousands of times during execution of one program. This all assumes
that import is virtually free after the first time -- which in fact it
is: just one dictionary lookup in sys.modules.
Second, it would mean that if you happen to be editing a module while
a program using the module is executing, different parts of the
program may be using two different incompatible versions of the
module.
Third, there are many modules that go through a long initialization
sequence when they are imported for the first time. The semantics of
this would entirely change if there were the possibility that an
imported module is initialized more than once. (Using reload() on
such modules would not be a good idea -- that's why you have to be a
little bit careful with reload().)
In fact, I resist the notion that sys.modules is a cache. It is the
collection of modules that have already been initialized. (Note that
this quite elegantly deternines the initialization order of imported
modules, which in C++ is done using a lot of handwaving...)
--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>