擅长:python、mysql、java
<blockquote>
<p>Python evaluates expressions from left to right. Notice that while
evaluating an assignment, the right-hand side is evaluated before the
left-hand side.</p>
<p><a href="http://docs.python.org/3/reference/expressions.html#evaluation-order" rel="noreferrer">http://docs.python.org/3/reference/expressions.html#evaluation-order</a></p>
</blockquote>
<p>这意味着表达式<code>a,b = b,a</code>如下:</p>
<ul>
<li>计算右边的<code>b,a</code>,也就是说,在内存中创建两个元素的元组。这两个元素是由标识符<code>b</code>和<code>a</code>指定的对象,这些标识符在程序执行过程中编码指令之前就存在</li>
<li>就在创建这个元组之后,还没有对这个元组对象进行赋值,但这无关紧要,Python内部知道它在哪里</li>
<li>然后,计算左手边,也就是说元组被分配到左手边</li>
<li>由于左侧由两个标识符组成,因此将元组解包,以便将第一个标识符<code>a</code>分配给元组的第一个元素(这是在交换之前由于名称<code>b</code>而在形式上是<strong>b</strong>的对象)<br/>
第二个标识符<code>b</code>被分配给元组的第二个元素(这是交换前的对象,因为它的标识符是<code>a</code>)</li>
</ul>
<p>这个机制有效地交换了分配给标识符<code>a</code>和<code>b</code>的对象</p>
<p>因此,回答您的问题:是的,这是交换两个对象上的两个标识符的标准方法。<br/>
顺便说一下,对象不是变量,它们是对象。</p>