Python源代码剖析笔记3-Python执行原理初探 本文简书地址:http://www.jianshu.com/p/03af86845c95 之前写了几篇源代码剖析笔记,然而慢慢觉得没有从一个宏观的角度理解python执行原理的话,从底向上分析未免太easy让人疑惑.不如先从宏观上对python执行原理有了一个基本了解,再慢慢探究细节.这样或许会好非常多. 这也是近期这么久没有更新了笔记了,一直在看源代码剖析书籍和源代码.希望能够从一个宏观层面理清python执行原理.人说读书从薄读厚,再从…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.PyListObject对象 --> 变长可变对象,可看作vector<PyObject *> typedef struct{ PyObject_VAR_HEAD //当中的ob_size表示实际被使用的内存的数量 PyObject **ob_item;//ob_item为指向元素列表的指针,实际上,Python中的list[0]就是ob_item[0] int allocat…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.python的运行过程 1)对python源码进行编译.产生字节码 2)将编译结果交给python虚拟机.由虚拟机依照顺序一条一条地运行字节码,产生运行结果 2.Python编译器的编译结果--PyCodeObject对象 Python编译器的编译结果中包括了字符串.常量值.字节码等在源码中出现的一切实用的静态信息. 在Python执行期间,这些静态信息被PyCodeObject对象中…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1. Python虚拟机会从编译得到的PyCodeObject对象中依次读入每一条字节码指令. 并在当前的上下文环境中运行这条字节码指令. Python虚拟机实际上是在模拟操作中运行文件的过程 PyCodeObject对象中包括了字节码指令以及程序的全部静态信息,但没有包括 程序执行时的动态信息--执行环境(PyFrameObject) 2.Python源代码中的PyFrameObject…
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhsenl/article/details/33747209 本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.线程环境初始化 Py_InitializeEx,Python会首先调用 PyInterpreterState_New创建一个崭新的PyInterpreterState对象. 创建了PyInterpreterState(进程状态…
6.0 序 元素和元素之间可能存在着某种关系,比如学生姓名和成绩.我希望能够通过学生的姓名找到这个学生的成绩,那么只需要将两者关联起来即可.字典正是这么做的,字典中的每个元素就是一个key:value键值对,通过指定的key可以找到value.首先我们在前面的章节中说过,字典这种数据结构,python底层也在大量的使用,比如每一个类都有自己的属性字典,这就意味着python对字典这种数据结构的性能要求是极其苛刻的.所以在python底层,对字典这种数据结构进行了高度的优化.理论上,字典查找元素的…
五.DICT对象 1.散列表概述 2.PyDictObject 3.PyDictObject的创建与维护 4.PyDictObject 对象缓冲池 5.Hack PyDictObject 这篇篇幅较长,难点在字典搜索. 1.散列表概述 python中的dict并没有采用map中的红黑树结构做关联,而是使用效率更高的散列表. 散列表通过一个函数将键值映射为一个整数,再将整数作为索引值访问内存.用于映射的函数称为散列函数,映射后的值为散列值.散列会发生冲突,解决散列冲突的方法有很多,python使用…
Redis 对象系统 1. 介绍 redis中基于双端链表.简单动态字符串(sds).字典.跳跃表.整数集合.压缩列表.高速列表等等数据结构实现了一个对象系统,而且实现了5种不同的对象,每种对象都使用了至少一种前面的数据结构,优化对象在不同场合下的使用效率. 双端链表源代码剖析和凝视 简单动态字符串(SDS)源代码剖析和凝视 字典结构源代码剖析和凝视 跳跃表源代码剖析和凝视 整数集合源代码剖析和凝视 压缩列表源代码剖析和凝视 高速列表源代码剖析和凝视 2. 对象的系统的实现 redis 3.2版…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.PyDictObject对象 -->  C++ STL中的map是基于RB-tree的,搜索时间复杂度是O(logN) PyDictObject採用了hash表,时间复杂度是O(1) typedef struct{ Py_ssize_t me_hash; //me_key的hash值,避免每次查询都要又一次计算一遍hash值 PyObject *me_key; PyObject *me…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.Python虚拟机在运行函数调用时会动态地创建新的 PyFrameObject对象, 这些PyFrameObject对象之间会形成PyFrameObject对象链,模拟x86平台上执行时栈 2.PyFuctionObject对象 typedef struct { PyObject_HEAD PyObject *func_code: //相应函数编译后的PyCodeObject对象 Py…