cpython的list类型的实现在哪里?

Posted

技术标签:

【中文标题】cpython的list类型的实现在哪里?【英文标题】:Where is the implementation of cpython's list type? 【发布时间】:2012-10-14 18:33:29 【问题描述】:

我想知道pythons列表类型的__setitem____getitem__code是在哪里定义的。我知道列表是用 C 实现的,但是我找不到实现列表的索引和切片操作的代码。

【问题讨论】:

【参考方案1】:

您可以在listobject.c file 中找到所有内容。

它的方法在list_methods() structure 中列举。您可能还想研究PyList_Type structure 以获得更多关于各种钩子实现的指针。

由于__getitem____setitem__ 都是C sequence protocol 的一部分,因此PyList_Type 结构指向定义这些挂钩的新结构list_as_sequence,列在PyList_Typetp_as_sequence 槽中。

list_item function 实现了__getitem__ 钩子,__setitem__list_ass_item 表示。

另一方面,切片由映射协议处理,您最终会(通过list_as_mappinglist_subscriptlist_ass_subscript

【讨论】:

【参考方案2】:

查看文件listobject.c ...我添加了一个answer earlier today,它指向您正在寻找的很多东西

【讨论】:

以上是关于cpython的list类型的实现在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以找到 set.symmetric_difference 等内置类型方法的类型注释?

cpython解释器内存机制

python基本--数据类型

火山引擎MARS专栏——Python3 cpython优化 实现解释器并行

元组在 CPython 中是如何实现的?

定义扩展类型(翻译)