2.1. 浮点对象
浮点对象是“定长对象”。
2.1.1. Python中的创建
Python中浮点对象创建最重要的方法为PyFloat_FromDouble,如下Python语句最终会调用到PyFloat_FromDouble:

2.1.2. PyFloat_FromDouble的C调用栈
词法解析,最终调到PyFloat_FromDouble,调用顺序如下:

2.1.3. PyFloat_FromDouble的C源码

可以看到:
浮点对象的C数据结构,所以Python中的浮点对象,实际上是C中的double。

采用浮点对象缓冲池

float_dealloc和PyFloat_FromDouble方法针对free_list和numfree的操作构成了Python的浮点对象缓冲池技术。采用链表,值得注意的是Py_TYPE(op),在此处被当做next指针。缓冲池大小有上限,Python3中为100。
PyObject_INIT
因为是定长对象,所以调用PyObject_INIT方法,与PyObject_INIT_VAR方法相比,只是少调用Py_SIZE(op) = (size)
2.2. 浮点对象的特性
2.2.1. 数值计算

浮点对象的数值计算由float_as_number定义:

2.2.2. to string

2.2.3. hash

2.2.4. 比较

2.2.5. 内置方法

2.2.6. 内置属性

2.3 参考
Python源码剖析
本文作者:whj0709
本文为云栖社区原创内容,未经允许不得转载。
网友评论