首页 > 解决方案 > 在 Python 中连接两个列表时内部会发生什么?

问题描述

连接两个列表时,

a = [0......, 10000000]
b = [0......, 10000000]

a = a + b

aPython 运行时是否分配一个更大的数组并循环遍历两个数组并将元素b放入更大的数组中?

或者它是否遍历元素b并将它们附加到a并根据需要调整大小?

我对 CPython 的实现很感兴趣。

标签: pythonlistcpython

解决方案


您可以通过查看连接前后的idof来了解:ab

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> id(a)
140025874463112
>>> a = a + b
>>> id(a)
140025874467144

在这里,由于id不同,我们看到解释器创建了一个新列表并将其绑定到 name a。旧a列表最终将被垃圾收集。

但是,使用增强赋值运算符时的行为可能会有所不同+=

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> id(a)
140025844068296
>>> a += b
>>> id(a)
140025844068296

在这里,由于id是相同的,我们看到解释器重用了相同的列表对象a并将值附加b到它。

有关更多详细信息,请参阅以下问题:


推荐阅读