今天在课堂上,我们了解到从列表中检索元素是O(1)
在Python中。为什么会这样呢?假设我有一个包含四个项目的列表,例如:
li = ["perry", 1, 23.5, "s"]
这些项目在内存中具有不同的大小。所以不可能获取内存位置li[0]
并添加每个元素大小的三倍以获得内存位置li[3]
。那么解释器如何知道在哪里li[3]
是不需要遍历列表来检索元素?
A list in Python is implemented as an array of pointers1. So, what's really happening when you create the list:
["perry", 1, 23.5, "s"]
是你实际上正在创建一个指针数组,如下所示:
[0xa3d25342, 0x635423fa, 0xff243546, 0x2545fade]
每个指针“指向”内存中各自的对象,因此字符串"perry"
将被存储在地址0xa3d25342
和号码1
将被存储在0x635423fa
, etc.
由于所有指针的大小相同,因此解释器can实际上将元素大小的 3 倍添加到li[0]
获取存储在的指针li[3]
.
1 Get more details from: the horse's mouth (CPython source code on GitHub) https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Include/listobject.h#L22.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)