考慮到性能的要求,我在工做中用的最多的是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代碼中的對象的類型。優化