Python 源码阅读:对象
来源:互联网 发布:知乎匿名提问怎么删除 编辑:程序博客网 时间:2024/06/05 06:28
新媒体管家
点击上方“程序员大咖”,选择“置顶公众号”
关键时刻,第一时间送达!
参考内容: Python源码 + >
用源代码+说明+图解的方式, 尽量说明白吧, 有一份注释在github上
内容:
->对象/类型
->各种内建类型对象及机制
->虚拟机相关(编译及执行)
->内存管理/动态加载/多线程等
PS: 画图的话google doc很好用
好的, 第一篇开始
一切皆为对象
对象, 在C语言是如何实现的?
Python中对象分为两类: 定长(int等), 非定长(list/dict等)
所有对象都有一些相同的东西, 源码中定义为PyObject和PyVarObject, 两个定义都有一个共同的头部定义PyObject_HEAD(其实PyVarObject有自己的头部定义PyObject_VAR_HEAD, 但其实际上用的也是PyObject_HEAD).
源码位置: Include/object.h (https://github.com/wklken/Python-2.7.8/blob/master/Include/object.h)
PyObject_HEAD
Python 内部, 每个对象拥有相同的头部.
定义
/* PyObject_HEAD defines the initial segment of every PyObject. */
#define PyObject_HEAD
_PyObject_HEAD_EXTRA
Py_ssize_tob_refcnt;
struct_typeobject *ob_type;
说明
1._PyObject_HEAD_EXTRA
先忽略,双向链表结构,后面垃圾回收再说
2.Py_ssize_t ob_refcnt
Py_ssize_t在编译时确定,整型
ob_refcnt,引用计数,跟Python的内存管理机制相关(基于引用计数的垃圾回收)
3.struct_typeobject *ob_type
*ob_type指向类型对象的指针(指向_typeobject结构体)
决定了这个对象的类型!
PyObject
定义
typedefstruct_object{
PyObject_HEAD
}PyObject;
说明
1.依赖关系
PyObject -> PyObject_HEAD
结构
PyVarObject
定义
typedefstruct{
PyObject_VAR_HEAD
}PyVarObject;
#define PyObject_VAR_HEAD
PyObject_HEAD
Py_ssize_tob_size;/* Number of items in variable part */
说明
1.依赖关系
PyVarObject->PyObject_VAR_HEAD->PyObject_HEAD
2.Py_ssize_tob_size
ob_size,变长对象容纳的元素个数
结构
代码关系
几个方法
跟对象相关的方法
#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
读取引用计数
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
获取对象类型
#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
读取元素个数(len)
跟引用计数相关的方法
Py_INCREF(op) 增加对象引用计数
Py_DECREF(op) 减少对象引用计数,如果计数位0,调用_Py_Dealloc
_Py_Dealloc(op)调用对应类型的tp_dealloc方法(每种类型回收行为不一样的,各种缓存池机制,后面看)
其他
几个参数涉及
ob_refcnt引用计数,与内存管理/垃圾回收相关
ob_type 类型,涉及Python的类型系统
来源:伯乐在线 - wklken
程序员大咖整理发布,转载请联系作者获得授权
【点击成为安卓大神】
- Python 源码阅读:对象
- 《Python源码剖析》阅读笔记:第一章-Python对象
- 《Python源码剖析》阅读笔记:第二章-整数对象
- 《Python源码剖析》阅读笔记:第三章-字符串对象
- 《Python源码剖析》阅读笔记:第四章-list对象
- 《Python源码剖析》阅读笔记:第五章-dict对象
- Python Unitest 源码阅读:概述
- [python]源码:对象
- jQuery源码阅读之获取jQuery对象
- redis3.0.7源码阅读(九)redis对象
- python源码阅读-闭包实现
- Python: matplotlib模块 源码阅读&理解
- 《Python 源码阅读》之 类型Type
- Python源码阅读-内存管理机制(一)
- Python源码阅读-内存管理机制(二)
- Python源码阅读-内存管理机制(三)
- python源码分析----对象结构
- 《Python 源码剖析》之对象
- 宏和函数的区别
- 当 WindowsXP 遇上这样的目标 IP 地址: xxx.xxx.xxx.255
- 2017java面试题(常规版)
- 搬瓦工彻底沦陷
- 【codevs 2822】爱在心中
- Python 源码阅读:对象
- 又被平均了!互联网人平均年薪19万;程序员四成单身!
- rdis+window+php 安装
- 8种方法让Android成为强大的生产力工具
- 为了说服经理重写代码
- iOS 与 JS 交互开发知识总结
- The android gradle plugin version 3.0.0-alpha1 is too old……的解决方法
- 通过jvm api实现从外部对java程序作gc垃圾回收
- 学习使用vim,以及各种vim插件