python - 为什么列表元素查找在 Python 中是 O(1)?

标签 python arrays list big-o

今天在类里面,我们了解到在 Python 中从列表中检索元素是 O(1)。为什么会这样?假设我有一个包含四个项目的列表,例如:

li = ["perry", 1, 23.5, "s"]

这些项目在内存中的大小不同。所以不可能把li[0]的内存位置加上每个元素大小的3倍就得到li[3]的内存位置。那么解释器如何知道 li[3] 在哪里而不必遍历列表以检索元素?

最佳答案

Python 中的列表实现为指针数组1。那么,当您创建列表时真正发生了什么:

["perry", 1, 23.5, "s"]

你实际上是在创建一个这样的指针数组:

[0xa3d25342, 0x635423fa, 0xff243546, 0x2545fade]

每个指针“指向”内存中的各个对象,因此字符串“perry”将存储在地址0xa3d25342和数字1 将存储在 0x635423fa 等处。

由于所有指针的大小都相同,解释器实际上可以将元素大小的 3 倍添加到 li[0] 的地址中以获取存储在 li[3] 的指针。


1 获取更多详细信息:the horse's mouth (CPython source code on GitHub) .

关于python - 为什么列表元素查找在 Python 中是 O(1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684993/

相关文章:

python 正则表达式打印文本文件中的先前单词

python - 由于 [Errno 13] 权限被拒绝错误,无法安装 PyMySQL

java - 数组作为网格,如何对角移动?

python - 努力使用切片语法来连接列表的一部分的列表元素

python - 使用 Python 刷新本地网页

python - 如果列的总和等于单个列,则删除一行

c# - 字符串未正确拆分

php - MYSQL 将数组与数据库表进行比较

c# - 检测连续整数并折叠为字符串

python - python中的列表索引比较