扩展vs+;=用于python中的不可变序列

扩展vs+;=用于python中的不可变序列,python,immutability,extend,Python,Immutability,Extend,python暗示s.extend(t)和s+=t对于某些可变序列s和iterablet是等价的。我惊讶地发现,对于一个不可变的序列,它们并不是等价的。有人能解释一下为什么extend会引发错误吗 >>> s = (1, 2) >>> s.extend((3,)) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError:

python暗示
s.extend(t)
s+=t
对于某些可变序列
s
和iterable
t
是等价的。我惊讶地发现,对于一个不可变的序列,它们并不是等价的。有人能解释一下为什么extend会引发错误吗

>>> s = (1, 2)
>>> s.extend((3,))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'extend'

extend
不能像
+=
那样创建一个新的元组,有什么实际原因吗?

我想你误解了这个错误。元组没有方法
extend
。这就是为什么不能调用它,不是因为它不能创建一个新的元组,而是因为它不是元组的方法。元组不是可变类型,所以文档中关于可变序列类型的内容都不适用。那么答案就在于当类没有实现
\uu iadd\uuuu
..@Chrispresso时,
+=
会返回什么,我明白了,但是如果+=等价于对可变对象进行扩展,而不可变对象支持+=,为什么它们不也支持扩展呢?似乎故意未定义元组的扩展。如果有很好的理由不定义它,为什么要允许+=呢?@deceze你知道我在哪里可以找到+=返回元组的内容吗?阅读副本…?从上面回答你的问题:
.extend
对一个不可变类型的扩展将是非常误导和荒谬的。
>>> s = (1, 2)
>>> s += (3,)
>>> s
(1, 2, 3)