len()内置函数是否遍历集合来计算其长度,还是访问集合的属性?

Lyd*_*Lyd 5 python python-internals

Python有许多内置函数,len()是其中之一.

返回对象的长度(项目数).参数可以是序列(例如字符串,字节,元组,列表或范围)或集合(例如字典,集合或冻结集).

如果集合和序列是对象,它们可以保存一个length可以在每次更改时更新的属性.访问此属性将是检索集合长度的快速方法.

另一种方法是迭代集合并计算动态项目的数量.

怎么len()计算长度?通过迭代或属性访问?其中一个,没有,两个,其他方法?

Mar*_*ers 7

Python内置集合在属性中缓存长度.使用len()不会迭代所有元素来计算它们,不.

将长度保持为属性是便宜且易于维护的.鉴于Python内置集合类型被广泛使用,他们这样做是不明智的.

具有长度的Python内置类型通常构建在PyObject_VAR_HEAD结构的顶部,结构包括ob_size条目.的Py_SIZE然后可以被用来实现该object.__len__方法(例如,PySequenceMethods.sq_length在C-API在插槽).例如,请参阅listobject.c实现list_length.