在python中查找列表长度时O(1)背后的原因

在python中查找列表长度时O(1)背后的原因,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,我正在浏览python中的一系列列表。我知道python列表在内部作为数组工作。但列表的内部长度是O1。因为它需要遍历到列表的末尾,增加计数器并返回它 提前感谢TL;DR列表记录其长度 在CPython中,调用len[]调用Py_SIZE C宏,该宏只返回ob_SIZE属性的值 定义Py_SIZEob_PyVarObject_CASTob->ob_size TL;DR列表记录其长度 在CPython中,调用len[]调用Py_SIZE C宏,该宏只返回ob_SIZE属性的值 定义Py_SIZEo

我正在浏览python中的一系列列表。我知道python列表在内部作为数组工作。但列表的内部长度是O1。因为它需要遍历到列表的末尾,增加计数器并返回它


提前感谢

TL;DR列表记录其长度

在CPython中,调用len[]调用Py_SIZE C宏,该宏只返回ob_SIZE属性的值

定义Py_SIZEob_PyVarObject_CASTob->ob_size
TL;DR列表记录其长度

在CPython中,调用len[]调用Py_SIZE C宏,该宏只返回ob_SIZE属性的值

定义Py_SIZEob_PyVarObject_CASTob->ob_size
可以很容易地实现一个列表类,该类的成员长度存储列表的实际长度,并且每当请求其长度时,只返回该成员,而不是再次查找长度。它跟踪长度。它不必遍历列表进行计数。可以很容易地实现一个列表类,该类具有存储列表实际长度的成员长度,并且每当请求其长度时,只需返回该成员,而不是再次查找长度。它跟踪长度。它不必遍历列表来计数。
static Py_ssize_t
list_length(PyListObject *a)
{
    return Py_SIZE(a);
}