<p>简短的版本是:Assignment在Python中没有任何变化,它只是重新绑定名称。重新绑定一个不同的名称,该名称恰好当前绑定到与<code>sys.ps1</code>相同的字符串的引用,不会以任何方式影响<code>sys.ps1</code>。在</p>
<p>让我们一步一步来:</p>
<pre><code>from sys import ps1
</code></pre>
<p>它导入<code>sys</code>(但不绑定当前全局中的名称<code>sys</code>),然后将当前全局中的名称<code>ps1</code>绑定到与<code>sys</code>的<code>ps1</code>相同的对象。在</p>
^{pr2}$
<p>这会将当前全局变量中的名称<code>ps1</code>重新绑定到与文本<code>'something else'</code>相同的对象。不可能影响<code>sys</code>模块。在</p>
<pre><code>import sys
</code></pre>
<p>它导入<code>sys</code>,然后将当前全局变量中的名称<code>sys</code>绑定到它。在</p>
<pre><code>sys.ps1 = 'something else '
</code></pre>
<p>它在当前全局变量中查找名称<code>sys</code>,获得对<code>sys</code>模块的引用,然后将该模块中的名称<code>ps1</code>重新绑定到与文本<code>'something else '</code>相同的对象。在</p>
<hr/>
<p>或者,用伪Python术语代替英语</p>
<p>您的第一个代码示例如下:</p>
<pre><code>tempspace._sys = __import__('sys')
globals.ps1 = tempspace._sys.ps1
del tempspace._sys
globals.ps1 = 'something else '
</code></pre>
<p>你的第二个是这样的:</p>
<pre><code>globals.sys = sys_modules.sys = __import__('sys')
globals.sys.ps1 = 'something else '
</code></pre>
<hr/>
<p>这是你在评论中所描述的文字记录。在</p>
<pre><code>Python 2.7.2 (default, Jun 20 2012, 16:23:33)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from sys import ps1
>>> id(sys.ps1)
4360831168
>>> id(ps1)
4360831168
>>> sys.ps1 = 'something else '
something else ps1
'>>> '
something else
</code></pre>
<p><code>sys.ps1</code>和{<cd5>}具有相同的ID,因为它们是引用同一对象的两个不同名称。在</p>
<p>而改变<code>sys.ps1</code>不会改变<code>ps1</code>。在</p>