python语言原理_python语言实现
最近看了看陈儒的《Python源码剖析》,写的很好,这里简单记录下python语言实现的几个点。
1、python对象实现原理
首先说下python中的对象的实现,python中基本所有东西都是对象,而这个对象都是基于PyObject。
[object.h]
typedefstruct_object {int ob_refcnt;//引用计数
struct _typeobject *ob_type;
} PyObject;
可以看到,这个数据结构十分简单,一个引用计数一个类型指针。
这个引用计数也就是垃圾回收机制的基础,和c++中的智能指针(shared_ptr)一样(智能指针也有4种!!),引用数为0就从堆上删除。
而对象的类型都是由这个ob_type来决定的。
例如创建一个PyIntObject,python内部会用一个PyObject*保存维护这个变量,使用时会去ob_type中找指定函数。例如:
long PyObject_Hash(PyObject *v)
{
PyTypeObject*tp = v->ob_type;if (tp->tp_hash !=NULL)return (*tp->tp_hash)(v);
······
}
类型的关键信息都保存在ob_type中。
2、PyDirtObject
dirt是python中亮相率极高的一个类型,python会为每个类的实例维护一个dict来保存成员变量。
dict和c++中的map,set都是关联容器,不过他们的底层实现不同,c++使用了优化的红黑树,而python则使用了散列表,查找复杂度由O(logN)降到O(1)(最优),但似乎需要的空间更大了,我们知道java中Hashtable 的实例有两个参数影响其性能:初始容量 和 加载因子。python的还没查到—_—!
3、虚拟机
python的虚拟机和java,c#的原理相同,那么这个所谓的虚拟机如何解释呢?下面是java虚拟机的解释
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
python前端生成的字节码(PyCodeObject)会交给虚拟机来运行,虚拟机上运行的也是一个对象——PyFrameObject,他就是运行时环境,包括一些namespace.
python语言原理_python语言实现相关推荐
- python epoll 并发_Python语言之python并发原理(阻塞、非阻塞、epoll)
本文主要向大家介绍了Python语言之python并发原理(阻塞.非阻塞.epoll),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在Linux系统中 01 阻塞服务端 特征: ...
- c和python的优缺点_Python语言有什么优缺点?
在很多人眼中,Python是一门全能语言,可以做很多的事情,那么你知道Python有什么优缺点吗?我想这是很多人都比较好奇的问题,我们一起来看看吧. 优点: Python是一种代表简单主义思想的语言, ...
- python多进程原理_python多进程的详细介绍(附示例)
本篇文章给大家带来的内容是关于PHP中的SAPI是什么?如何实现?(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 进程 Python是运行在解释器中的语言,查找资料知道,py ...
- python gil原理_Python GIL深入浅出
概述 GIL(Global Interpreter Lock)是什么东东?为什么当一些Pythoners在开发一些多线程操作的时候,都会有些很多疑问?多线程真的很糟糕吗?我该如何实现多线程并发操作?今 ...
- python语言属于科学计算语言吗_python语言属于( )
[单选题]以下不属于Python语言保留字的是( ) [填空题]假定用2个字节存储整数.无符号整数的机器码FFFFH对应的真值是 ,无符号整数的机器码8000H对应的真值是 ;有符号整数的机器码FFF ...
- python语言结构_Python语言表示语句结构时采用
Python语言表示语句结构时采用 答: 缩进 夏代出现专门的教射和习射的场所是 . 答:序 五行相生相克,又分别对应五种颜色,其中火对应颜色() 答:赤 非暴力沟通中的"表达情绪" ...
- python常考题_Python语言基础考察点:python语言基础常见考题(一)
一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...
- 学python的前提_Python语言学习前提:条件语句
一.条件语句 1.条件语句:通过一条或多条语句的执行结果(True或False)来决定执行额代码块.python程序语言指定任何非0或非空(null)的值为true,0或null为false. 2. ...
- python语言用法_python语言基本语句用法总结(1.)
python语句与语法 1.python简单语句的基本介绍 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21>>> wh ...
最新文章
- ThreadLocal的设计与实现
- 用div来创建田字布局
- 比较 J2EE,eclipse adt扩展和Android studio几个类似IDE菜单的异同点
- linux csi驱动添加,CSI接口Camera驱动学习
- esp8266时钟_ESP8266(Non-OS SDK) 驱动 waveshare 2.9 寸墨水屏(二)- 程序移植、修改与测试
- HSV颜色空间转RGB(C语言代码),ESP32使用RMT驱动WS2812B,七彩流光灯光效果
- poj japan 数状数组解决逆序数
- MAC OS修改hosts
- 我的2020年终回顾:人生,海海,破浪前行
- adobe photoshop cs6 安装
- 新手小白如何选择吉他,初学者的入门吉他推荐
- 嘀嘀的费用是优步的两倍?
- 医疗对话摘要论文阅读笔记
- 居于mtk芯片安卓车机系统具体流程
- 花生日记,购物省钱还能赚钱,淘宝天猫优惠券一网打尽!2018,你还打算将错就错继续做微商吗?...
- php 结合md5的加密,解密方法
- echarts导出excel报表
- CVE-2018-7900:华为部分型号路由器曝信息泄露漏洞
- 油烟排放浓度监控系统在浙江省环保治理的应用
- Apache HBase 快照(Snapshots) 介绍