当连接两个列表时,
a = [0......, 10000000]
b = [0......, 10000000]
a = a + b
Python 运行时是否分配更大的数组并循环遍历两个数组并将 a
和 b
的元素放入更大的数组中?
还是循环遍历 b
的元素并将它们附加到 a
并根据需要调整大小?
我对 CPython 的实现很感兴趣。
最佳答案
你可以通过查看a
的id
在串联b
前后找到:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> id(a)
140025874463112
>>> a = a + b
>>> id(a)
140025874467144
这里,由于 id
不同,我们看到解释器创建了一个新列表并将其绑定(bind)到名称 a
。旧的 a
列表最终会被垃圾回收。
但是,当使用扩充的赋值运算符 +=
时,行为可能会有所不同:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> id(a)
140025844068296
>>> a += b
>>> id(a)
140025844068296
这里,由于 id
相同,我们看到解释器重用了相同的列表对象 a
并附加了 b
的值> 给它。
有关更多详细信息,请参阅以下问题:
关于python - 在 Python 中连接两个列表时内部会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65616945/