
《Python源码剖析》阅读笔记
hbprotoss
只要是人都是依靠自己的知识和认知并且也被其束缚着生活的,那叫做现实。但知识和认知是暖昧不清的东西,现实也许只是镜花水月,人都是活在自己的执念中的。
展开
-
《Python源码剖析》阅读笔记:第一章-Python对象
第一章-Python对象 所有Python对象都直接或间接继承自PyObject,PyObject的定义很简单:struct _object {Py_ssize_t ob_refcnt; // 引用计数struct PyTypeObject *ob_type; // 类型对象指针} PyObject;引用计数决定对象的生存。当ob_refcnt为0时销毁对象原创 2012-08-17 09:07:43 · 2658 阅读 · 0 评论 -
《Python源码剖析》阅读笔记:第二章-整数对象
第二章-整数对象 整数对象定义:typedef struct { PyObject_HEAD long ob_ival;} PyIntObject;可以看到仅多了一个long域ob_ival来保存整数。之所以用long,是因为这里用long最高的符号位作为溢出标记位。整数对象内存管理机制:1. 小整数:在[ -NSMALLNEGI原创 2012-08-17 09:11:09 · 2625 阅读 · 0 评论 -
《Python源码剖析》阅读笔记:第三章-字符串对象
第三章-字符串对象 字符串对象定义:typedef struct {PyObject_VAR_HEADlong ob_shash;int ob_sstate;char ob_sval[1];} PyStringObject;由于字符串是变长对象,所以有变长对象头。ob_shash用来缓存当前字符串的哈希值,这在以字符串作为key的dict对象查询时非常有用。原创 2012-08-17 09:12:37 · 2969 阅读 · 0 评论 -
《Python源码剖析》阅读笔记:第四章-list对象
第四章-list对象 list对象定义:typedef struct {PyObject_VAR_HEADPyObject **ob_item;Py_ssize_t allocated;} PyListObject;list对象是变长对象,所以有变长对象头ob_item数组为真正的存储容器,用来存储PyObject对象指针。ob_size表示list长度。原创 2012-08-17 09:13:41 · 3863 阅读 · 0 评论 -
《Python源码剖析》阅读笔记:第五章-dict对象
第五章-dict对象 Python里的dict和C++ STL的map一样,都是映射容器(key->value),但实现原理不同。由于Python内部大量使用dict这种结构(比如字符串对象的intese机制),效率要求很高,所以Python没有使用STL map的平衡二叉树,而采用哈希表,最低能在O(1)时间内完成搜索。使用hash就必须解决冲突的问题,dict采用的是开放寻址法。原原创 2012-08-17 09:15:16 · 5945 阅读 · 0 评论