API和ABI版本控制 PY_VERSION_HEX是以单个整数编码的Python版本号. 例如,如果PY_VERSION_HEX设置为0x030401a2,可以通过以下方式将其视为32位数来找到底层信息: 字节 位(大端序) 含义 1 1-8 PY_MAJOR_VERSION(3在3.4.1a2) 2 9-16 PY_MINOR_VERSION(4在3.4.1a2) 3 17-24 PY_MICRO_VERSION(1在3.4.1a2) 4 25-28 PY_RELEASE_LEVEL(0xA对于alpha,0xBfor beta,0xC发布候选人和0xF最后),在这种情况下它是alpha.

支持循环垃圾收集 Python对检测和收集涉及循环引用的垃圾的支持需要来自对象类型的支持,对象类型是其他对象的“容器”,也可以是容器。不存储对其他对象的引用或仅存储对原子类型(如数字或字符串)的引用的类型不需要为garbagecollection提供任何显式支持. 要创建容器类型,类型对象的tp_flags字段必须包含Py_TPFLAGS_HAVE_GC并提供tp_traverse处理程序的实现。如果该类型的实例是可变的,那么tp_clear还必须提供实现. Py_TPFLAGS_HAVE_GC 具有此标志集的类型的对象必须符合此处记录的规则。为方便起见,这些对象将被称为容器对象. 容器类型的

类型对象 也许Python对象系统最重要的结构之一是定义新类型的结构:PyTypeObject结构。可以使用PyObject_*()或PyType_*()函数中的任何一个来处理类型对象,但是对于大多数Python应用程序来说,它们并没有提供太多有趣的东西。这些对象是对象行为的基础,对于解释器本身以及实现新类型的任何扩展模块非常重要. 与大多数标准类型相比,类型对象相当大。大小的原因是每个类型对象存储大量值,主要是Cfunction指针,每个指针都实现了类型功能的一小部分。本节详细介绍了类型对象的字段。这些字段将按照它们在结构中的顺序进行描述. Typedef:unaryfunc,binaryf

公共对象结构 在Python的对象类型的定义中使用了大量结构。本节描述了这些结构及其使用方法. 所有Python对象最终在对象在内存中的表示开头共享少量字段。它们由PyObject和PyVarObject类型表示,它们又由一些宏的扩展定义,无论是直接还是间接地在所有其他Python对象的定义中使用. PyObject 所有对象类型都是此类型的扩展名。这是一种包含Python将对象指针作为对象处理的信息的类型。在正常的“发布”版本中,它只包含对象的引用计数和指向相应类型对象的指针。实际上没有声明为PyObject,但每个Python对象都可以转换为PyObject*。访问主题必须使用宏Py_RE

在堆上分配对象 PyObject * _PyObject_New( PyTypeObject  *type) Return value: New reference. PyVarObject * _PyObject_NewVar( PyTypeObject  *type,Py_ssize_t  size) Return value: New reference. PyObject * PyObject_Init( PyObject  *op,PyTypeObject  *type) Return value: Borrowed reference. 使用类型和初始引用初始化一个新分配的对象op

MemoryView对象 一个memoryview对象将C级缓冲区接口暴露为Python对象,然后可以像其他对象一样传递 PyObject * PyMemoryView_FromObject( PyObject  *obj) Return value: New reference. 从提供缓冲接口的对象创建一个memoryview对象。如果obj支持可写缓冲区导出,memoryview对象将被读/写,否则它可能是只读或读/写导出器的分布. PyObject * PyMemoryView_FromMemory( char  *mem,Py_ssize_t  size,int  flags) Re

切片对象 PyTypeObject PySlice_Type 切片对象的类型对象。这与thePython图层中的slice相同. int PySlice_Check( PyObject  *ob) 返回如果ob是一个切片对象;ob一定不能NULL. PyObject * PySlice_New( PyObject  *start,PyObject  *stop,PyObject  *step) Return value: New reference. 返回具有给定值的新切片对象。start, stop和step参数用作相同名称的切片对象属性的值。任何值都可以是NULL,在这种情况下None将用

字典对象 PyDictObject PyObject的子类型表示一个Python字典对象. PyTypeObject PyDict_Type PyTypeObject的这个实例表示Python字典类型。这与Python层中dict的对象相同. int PyDict_Check( PyObject  *p) 如果p是dict对象或dicttype的子类型实例,则返回true。 int PyDict_CheckExact( PyObject  *p) 如果p是一个dict对象,则返回true,但不是dict类型子类的实例. PyObject* PyDict_New() Return value:

列表对象 PyListObject 这个 的子类型PyObject代表一个Python列表对象. PyTypeObject PyList_Type 这个的实例PyTypeObject代表Python列表类型。这是与list在Python层. int PyList_Check( PyObject  *p) 如果p是一个,则返回truelisttype对象或listtype的子类型实例 int  PyList_CheckExact( PyObject  *p) 如果p是列表对象,则返回true,但不是列表类型的子类型的实例. PyObject* PyList_New( Py_ssize_t  le

元组对象   PyTupleObject PyObject的子类型代表一个Python元组对象. PyTypeObject PyTuple_Type PyTypeObject的这个实例表示Python元组类型;它与Python层中tuple的对象相同. int PyTuple_Check( PyObject  *p) 如果p是元组对象或tupletype的子类型实例,则返回true。 int PyTuple_CheckExact( PyObject  *p) 如果p是元组对象,则返回true,但不是元组类型子类的实例. PyObject* PyTuple_New( Py_ssize_