清单上的Python append()与+运算符,为什么它们给出不同的结果?

发布于 2021-02-02 23:09:41

为什么这两个操作(append()分别+)给出不同的结果?

>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>> 

在最后一种情况下,实际上存在无限递归。c[-1]c一样。为什么与+操作不同?

关注者
0
被浏览
63
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    解释“为什么”:

    该+操作将数组元素添加到原始数组。该array.append操作将数组(或任何对象)插入原始数组的末尾,这将导致对该点的self引用(因此无限递归)。

    此处的区别在于,通过连接元素来添加数组时,+操作的作用是特定的(与其他数组一样重载,请参见本章的序列)。但是,append-method确实可以按照你的要求执行:将对象附加在你赋予它的右侧(数组或任何其他对象),而不是获取其元素。

    替代

    使用extend(),如果你想使用的作用类似于+运算符的功能(如其他人在这里显示为好)。相反,这样做是不明智的:尝试使用+运算符模仿列表的追加(有关原因,请参阅我之前的链接)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看