今天在类里面,我们了解到在 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/