Python源码剖析的笔记(45)

>我来写笔记

按有用程度 按页码先后 最新笔记

  • goorockey

    goorockey

    由于python很多地方都用字典类型实现,对速度要求高,所以: 1、python的字典通过散列表实现,搜索的时间复杂读为O(1)(C++的STL的map是用红黑树来实现,搜索的时间复杂度为O(log2N)) 2、通过开放定址法处理冲突 (SGI STL的散列map通过开链法处理冲突) 开放定址法在发生冲突时,通过探测函数继续寻找可用的节点,直到找到可用的为止,这就形成了多条以探测函数为索引的探测链。 则删除节点时,不能直接去除,而只能做标记...

    2013-01-09 21:58   6人喜欢

  • [已注销]

    [已注销]

    Python 拥有两套垃圾回收机制。除了引用计数,还有个专门处理循环引用的 GC。 通常提到垃圾回收时,都是指这个 "Reference Cycle Garbage Collection"。 能引发循环引用用问题的,都是那种容器类对象,比如 list、set、object 等。对于这类对象,虚拟机在为其分配内存时,会额外添加⽤用于追踪的 PyGC_Head。这些对象被添加到特殊链表里,以便GC 进行管理。 同 .NET、JAVA 一样,Python GC 同样将要回收的对象..

    2013-02-02 21:49   2人喜欢

  • goorockey

    goorockey

    一个Code Block算一个名字空间,一个Code Block指一个名字 空间或者作用域 一个名字空间对应编译出一个PyCodeObject,对应一个pyc文件 PyCodeObject是python的编译结果, 运行结束后,可以把一个PyCodeObject保存为pyc文件,下次运行可以直接从pyc文件中读取该PyCodeObject,而不用再编译 pyc文件只是PyCodeObject的硬盘表现 /* Bytecode object */ typedef struct { PyObject_HEAD int co_argcount; /...

    2013-01-09 22:04   2人喜欢

  • 梦里醉逍遥

    梦里醉逍遥 (愚者暗于成事,知者见于未萌。)

    作者使用的是Python 2.5的源码,与现在我用的(2.7.3)略有不同。 比如在int_print中添加PyObject_Print的部分,书中是放在fprintf(fp, "%ld", v->ob_ival)一句前面——后来的Python在这一句前后添加了Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS两个宏,如果把PyObject_Print加在这两个宏之间运行时会出现"Fatal Python error: PyEval_SaveThread: NULL tstate"的错误,原因我暂时还不知道。解决方法..   (1回应)

    2013-02-12 22:22   1人喜欢

  • goorockey

    goorockey

    栈帧,是python中的运行时环境类,记录虚拟机运行时的代码块状态信息(如局部变量的名字和值的映射等) 每发生一次函数调用,就创建一个对应的PyFrameObject 里面有builtin,global,local三个名字空间的映射表(PyDictObject对象) f_code是待执行的PyCodeObject对象 通过f_back把栈帧连起来 最后的f_localsplus是这个栈帧的栈空间,存放局部变量等,通过f_valuestack和f_stacktop来维护这个空间的使用情况 typedef st...

    2013-01-09 22:05   1人喜欢

  • goorockey

    goorockey

    列表对象的定义: typedef struct { PyObject_VAR_HEAD /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ PyObject **ob_item; /* ob_item contains space for 'allocated' elements. The number * currently in use is ob_size. * Invariants: * 0 <= ob_size <= allocated * len(list) == ob_size * ob_item == NULL implies...

    2013-01-09 21:58   1人喜欢

  • 烟雨

    烟雨 (烟锁重楼千里尽,雨打芭蕉万点残)

    对于字符串,列表之类的单一类型变量重复多次的变量,用PyVarObject来存放 /代码内容已省略/ 可以说,变长对象都是定长对象的容器。对于字符串来说,是定长对象char的容器。 ob_size指明的是所容纳元素的个数,而不是字节的数量 PyDictObject的定义里有PyObject_HEAD,而不是PyObject_VAR_HEAD,所以dict是一个定长对象而不是变长对象 在_typeobject的定义中包含了许多的信息,主要可以分为...

    2017-01-24 16:53

  • 烟雨

    烟雨 (烟锁重楼千里尽,雨打芭蕉万点残)

    malloc与new的不同点: 从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。 而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。 第一、malloc 函数返回的是 void * 类型,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。 第二、函数的实..

    2017-01-24 16:18

  • 烟雨

    烟雨 (烟锁重楼千里尽,雨打芭蕉万点残)

    Include :该目录下包含了Python提供的所有头文件,如果用户需要自己用C或C++来编写自定义模块扩展Python,那么就需要用到这里提供的头文件。 Lib :该目录包含了Python自带的所有标准库,Lib中的库都是用Python语言编写的。 Modules :该目录中包含了所有用C语言编写的模块,比如random、cStringIO等。Modules中的模块是那些对速度要求非常严格的模块,而有一些对速度没有太严格要求的模块,比如os,就是用Python编写,并且放在...

    2017-01-24 14:50

  • 烟雨

    烟雨 (烟锁重楼千里尽,雨打芭蕉万点残)

    [A.py] from B import D class C: pass [B.py] from A import C class D: pass 上面这两段代码不能相互调用,因为循环引用了 在图的左边,是Python提供的大量的模块、库以及用户自定义的模块。比如在执行import os时,这个os就是Python内建的模块,当然用户还可以通过自定义模块来扩展Python系统。 右边,是Python的运行时环境,包括对象/类型系统(Object/Type structures)、内存分配器(Memory Allocator...

    2017-01-24 14:25

<前页 1 2 3 4 5 后页>

笔记是你写在书页留白边上的内容;是你阅读中的批注、摘抄及随感。

笔记必须是自己所写,不欢迎转载。摘抄原文的部分应该进行特殊标明。

Python源码剖析

>Python源码剖析