<p>与<code>^=</code>相关并在窗帘后面被称为<code>__ixor__</code>。与<code>^</code>相关的特殊方法是<code>__xor__</code>。他们不必表现得一样。在</p>
<p><a href="https://docs.python.org/3/reference/datamodel.html#object.__ixor__" rel="nofollow noreferrer"><strong>^{<cd2>}</strong></a>是<a href="https://docs.python.org/3/reference/datamodel.html#object.__xor__" rel="nofollow noreferrer"><strong>^{<cd4>}</strong></a>的<a href="https://www.python.org/dev/peps/pep-0203/" rel="nofollow noreferrer"><strong>Augmented Assignment</strong></a>变体,可能时执行就地操作,当<code>__ixor__</code>未实现时,返回到<code>__xor__</code>。在</p>
<p>原则上,该方法的返回值完全取决于<code>__ixor__</code>的实现,但也有一些常见的用例。在</p>
<p>对于两个集合,<code>a ^= b</code>计算集合<code>a</code>和<code>b</code>(两个集合中正好有一个集合中的所有元素)的<strong>对称差</strong>,并且<em>变异</em><code>a</code>。在</p>
<pre><code>>>> a = {1, 2, 3}
>>> b = {1, 4, 5}
>>> reference = a
>>>
>>> a ^= b
>>> a
{2, 3, 4, 5}
>>> reference
{2, 3, 4, 5}
</code></pre>
<p>注意,<code>a</code>在<em>的地方发生了突变,因此<code>a</code>和{<cd16>}都指向内存中相同的<code>set</code>对象{<cd18>}。因此,<code>^=</code>的行为与本例中的<code>^</code>不同,后者构建了一个新的集合</em>,如下所示。在</p>
^{pr2}$
<p>请注意,<code>a = a^b</code>已经构建了一个新的集合,名称<code>a</code>已被<em>重新分配到</em>,并且<code>reference</code>仍然引用原始集<code>{1, 2, 3}</code>。在</p>
<p>对于内建<em>不可变的</em>类型(如整数),<code>a ^= b</code>实际上相当于<code>a = a^b</code>。由于整数没有<code>__ixor__</code>方法,Python回到使用<code>__xor__</code>的方法。
在整数的情况下,<code>a ^= b</code>执行一个<strong>位不相等的</strong>操作,并将名称<code>a</code>重新分配给该计算的结果。在</p>
<p>演示:</p>
<pre><code>>>> a = 5
>>> b = 6
>>> a^b
3
</code></pre>
<p>说明:</p>
<pre><code> 101 (5 decimal)
XOR 110 (6 decimal)
-------------------
011 (3 decimal)
</code></pre>