这个问题在这里已经有了答案:
Why does += behave unexpectedly on lists?
(9 个回答)
Different behaviour for list.__iadd__ and list.__add__
(3 个回答)
1年前关闭。
我想了解为什么以下三个非常简单的 python 代码给出(显然)不一致的答案。这只是了解正在发生的事情的玩具练习,而不是现实世界的问题。类 myList(list) 继承自 list 并定义了一个方法“add”,该方法应该模仿众所周知的“extend”方法。我尝试通过三种方式做到这一点,直接使用扩展、+ 运算符和 +=。然而,出乎意料的是,我得到了不一致的答案。请注意,在这三个代码中,有一行(在 add 方法中)发生了变化。
代码 1: self.extend(item)
class myList(list):
def add(self,item):
self.extend(item)
l = myList([1,2])
l.add([3,4])
print(l)
版画
[1, 2, 3, 4]
代码 2:自我 = 自我 + 元素
class myList(list):
def add(self,item):
self = self + item
l = myList([1,2])
l.add([3,4])
print(l)
版画
[1, 2]
代码 3:自身 += 项目
class myList(list):
def add(self,item):
self += item
l = myList([1,2])
l.add([3,4])
print(l)
版画
[1, 2, 3, 4]
我有点困惑……发生了什么事?
先感谢您。
最佳答案
self = self + item
不修改对象,只修改方法内部的局部变量。
通过使用
+
口译员正在调用 __add__
在 list
,这将创建一个新列表,然后您将创建 self
变量指向它内 add
方法,当方法退出时,它的值被丢弃。另一方面,
+=
版本调用 __iadd__
list
的方法类,它按预期更新其内容。
关于python - 列表继承 : "extend" vs "+" vs "+=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58951984/