考虑到性能的要求,我在工做中用的最多的是c/c++,然而,工做中又常常会有一些验证性的工做,这些工做对性能的要求并不高,反而对完成的效率要求更高,对于这样的工做,用一种开发效率高的语言是合理的想法,鉴于python的流行以及为你们所称道的开发效率和灵活性,我便开始渐渐多的接触起python来。但是,问题又来了,用python验证完了以后,须要优化性能,甚至移植到c/c++里面来,这时候,愈发以为有必要深刻学习python,了解其内部原理。通过一番搜索,找到了这本《Python源码剖析》,开始了个人python深刻学习之旅。python
1、Python对象初探c++
python语言中的一切,包括变量和变量类型,底层都是靠c语言的某种对象/结构体来实现的。也能够理解为,python中全部的东西都是用c的对象来实现的(这里理解为struct的对象)。这些全部对象都对应的定义中,开头的部分是相同的,都是PyObject:性能
[object.h] typedef struct _object { PyObject_HEAD } PyObject;
[object.h] #ifdef Py_TRACE_REFS /* Define pointers to support a doubly-linked list of all live heap objects. */ #define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ struct _object *_ob_prev; #define _PyObject_EXTRA_INIT 0, 0, #else #define _PyObject_HEAD_EXTRA #define _PyObject_EXTRA_INIT #endif /* PyObject_HEAD defines the initial segment of every PyObject. */ #define PyObject_HEAD \ _PyObject_HEAD_EXTRA \ int ob_refcnt; \ struct _typeobject *ob_type;
整型变量ob_refcnt与Python的内存管理机制有关,它实现了基于引用计数的垃圾收集机制。而ob_type是一个指向_typeobject结构体的指针,_typeobject结构体定义了所指向对象的类型,定义以下:学习
[object.h] typedef struct _typeobject { PyObject_VAR_HEAD char *tp_name; /* For printing, in format "<module>.<name>" */ int tp_basicsize, tp_itemsize; /* For allocation */ /* Methods to implement standard operations */ destructor tp_dealloc; printfunc tp_print; …… /* More standard operations (here for binary compatibility) */ hashfunc tp_hash; ternaryfunc tp_call; …… } PyTypeObject;
也就是说PyTypeObject这个结构体定义了python的c代码中的对象的类型。优化