I thought I understood how import worked...

Cameron Simpson cs at zip.com.au
Thu Aug 9 07:52:22 CEST 2012


On 08Aug2012 14:14, Ben Finney <ben+python at benfinney.id.au> wrote:
| Cameron Simpson <cs at zip.com.au> writes:
| > All of you are saying "two names for the same module", and variations
| > thereof. And that is why the doco confuses.
| >
| > I would expect less confusion if the above example were described as
| > _two_ modules, with the same source code.
| 
| That's not true though, is it? It's the same module object with two
| different references, I thought.

No. They're two in-memory module instantiations with distinct module
names. ISTR that when this got me I had imported the a module in one
place with its full name and elsewhere with a bad relative reference; I
forget the details now. But anyway, that got me the same module code
loaded twice, distinctly named.

| Also, even if what you say were true, “source code” implies the module
| was loaded from source code, when Python allows loading modules with no
| source code available. So that implication just seems to be inviting
| different confusion.

Please let's nail one thing first. We can always quibble about the term "source
code" to prefer "source code or byte code" or something of that ilki,
later.

But the confusion comes from calling these things the "same module".
Which breaks the "modules are only loaded once" mental image.

The confusion would often be avoided if the doco took the line that
it is two modules because they were obtained using two names. Their
original might be the same physical/logical place (such as a module
source code file), but the end result is two modules.

The point is that the "module" term would be better if it referred to the
in-memory Python module, and didn't do double time as meaning the
(typically) source file from which the Python code comes.

Cheers,
-- 
Cameron Simpson <cs at zip.com.au>

We had the experience, but missed the meaning.  - T.S. Eliot


More information about the Python-list mailing list