Python 源码阅读 —— int

555 查看

========================== 

代码我也仅仅是粗粗读了一遍, 可能出现疏漏和理解错误, 发现了望指出哈.

今天面了一家靠谱的创业公司, 可惜不是Python向的, 想继续玩Python是有代价的, 选择余地太窄了……

话说写文章很耗时间, 这个花了两个多小时….主要还是自个绘图渣效率低:(

准备找工作事宜很占时间, 后面只能慢慢来了(好像还很多很多的样子)


示例

源码位置 Include/intobject.h |
Objects/intobject.c


PyIntObject

结构

PyIntObject


几个构造方法

这几个方法, 只需要关注


具体的构造方法 PyInt_FromLong

这个方法的定义

注意这里的Py_TYPE()方法, 在我们第一篇文章里面有提到, 不知道的回去复习下对象的数据结构

简而言之:


小整数对象池

先看定义

其实, 小整数对象池就是一个PyIntObject指针数组(注意是指针数组), 大小=257+5=262, 范围是[-5, 257) 注意左闭右开. 即这个数组包含了262个指向PyIntObject的指针.

结构

small_ints

创建整数时, 如果在[-5, 257)范围, 直接返回已经存在的整数对象指针, 所以我们看到开头的例子, id比较一个true/一个false

小整数对象池, 在一开始就初始化了, 其初始化代码

代码很眼熟吧, 觉得不眼熟回上面看代码

结论