python - 在 Python 中连接两个列表时内部会发生什么?
问题描述
连接两个列表时,
a = [0......, 10000000]
b = [0......, 10000000]
a = a + b
a
Python 运行时是否分配一个更大的数组并循环遍历两个数组并将元素b
放入更大的数组中?
或者它是否遍历元素b
并将它们附加到a
并根据需要调整大小?
我对 CPython 的实现很感兴趣。
解决方案
您可以通过查看连接前后的id
of来了解:a
b
>>> 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
到它。
有关更多详细信息,请参阅以下问题:
推荐阅读
- python - 列出目录中的所有文件夹,忽略任何其他文件
- python - 将选择结果发送到 Web 服务
- javascript - 通过 PhpStorm Watcher 的 YUI Compressor 不会混淆 JavaScript 代码
- java - 使用jsp将多个文件同时上传到mysql数据库失败
- kubernetes - 将卷安装为只读有性能优势吗?
- nlp - 如何让 spaCy 使用通用依赖项
- c++ - 为什么这里无法访问枚举?
- php - PHP 7.2 不能在 eval 中使用字符串偏移作为数组
- java - 如何使用弹簧休息从excel的特定列中检索值
- excel - 在不同的目标单元格上自动导入文本文件