擅长:python、mysql、java
<p>我认为从根本上说,您对创建带有修改的新对象(在本例中是<code>__add__</code>)和修改现有对象(例如<code>extend</code>)之间的区别感到困惑。在</p>
<h3><code>__add__</code></h3>
<p>正如前面提到的其他答案,<code>__add__</code>方法实现了<code>+</code>运算符,并返回一个新对象。元组和列表都有一个。例如:</p>
<pre><code>>>> tuple_0 = (1,)
>>> tuple_1 = tuple_0.__add__((2,))
>>> tuple_1 is tuple_0
False
>>>
>>> list_0 = [1]
>>> list_1 = list_0.__add__([2])
>>> list_1 is list_0
False
</code></pre>
<h3><code>extend</code></h3>
<p>列表是可变的,有一个<code>extend</code>方法,它修改现有对象并返回<code>None</code>。元组是不可变的。例如:</p>
^{pr2}$
<p>列表还有其他方法可以更改现有对象,如<code>append</code>、<code>sort</code>、<code>pop</code>等,但是<code>extend</code>与{<cd1>}最为相似。在</p>