4. 解密Python中最简单的对象--浮点数的底层实现
楔子 从现在开始,我们就来分析Python中常见的内置对象、以及对应的实例对象,看看它们在底层是如何实现的。但说实话,我们在前面几节中介绍对象的时候,已经说了不少了,不过从现在开始要进行更深入的分析。 除了对象本身,还要看对象支持的操作在底层是如何实现的。我们首先以浮点数为例,因为它是最简单的,没错,浮点数比整型要简单。至于为什么,当我们分析整型的时候就知道了。 内部对象 float实例对象定义在Include/floatobject.h中,结构非常简单: typedef struct { PyObject_HEAD double ob_fval; } PyFloatObject; 除了PyObject这个公共的头部信息之外,只有一个额外的ob_fval,用于存储具体的值,而且直接使用的C中的double。 那么float类型对象在底层长啥样子呢? 与实例对象不同,float类型对象全局唯一,因此可以作为全局变量定义。底层对应PyFloat_Type,位于Objects/typeobject.c中。 PyTypeObject PyFloat_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "float", sizeof(PyFloatObject), 0, (destructor)float_dealloc, /* tp