擅长:python、mysql、java
<blockquote>
<p>When we import something like that do we two references to the same module?</p>
</blockquote>
<p>正确。<code>as</code>子句所做的就是将一个新名称绑定到一个对象。如果您直接导入一个模块,然后通过<code>as</code>导入同一个模块但名称不同,则两个名称将指向完全相同的对象。例如:</p>
<pre><code>>>> import re
>>> import re as regex
>>>
>>> id(re) == id(regex)
True
>>>
</code></pre>
<p><a href="https://docs.python.org/3/reference/simple_stmts.html?highlight=import%20statement#import" rel="nofollow noreferrer">documentation for ^{<cd3>} statements also mentions this behavior</a>:</p>
<blockquote>
<p>If the module name is followed by as, then the name following as is bound directly to the imported module.</p>
</blockquote>
<hr/>
<blockquote>
<p>Aren't module imports supposed to be singleton objects? </p>
</blockquote>
<p>是的,你可以这样想。Python只在需要时执行导入模块的代码,所以从技术上讲是的。模块对象是单例对象。但你必须记住,即使是单身汉也可以有多个名字。在</p>
<p>仅仅因为您为一个对象创建了一个新别名,并不意味着您创建了一个全新的对象。您所做的只是创建一个新名称来引用完全相同的对象。如果这不是真的,那么上面的代码将返回<code>False</code>作为<code>re</code>和{<cd6>}是不同的对象</p>