最近看了看陈儒的《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语言实现相关推荐

  1. python epoll 并发_Python语言之python并发原理(阻塞、非阻塞、epoll)

    本文主要向大家介绍了Python语言之python并发原理(阻塞.非阻塞.epoll),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在Linux系统中 01 阻塞服务端 特征: ...

  2. c和python的优缺点_Python语言有什么优缺点?

    在很多人眼中,Python是一门全能语言,可以做很多的事情,那么你知道Python有什么优缺点吗?我想这是很多人都比较好奇的问题,我们一起来看看吧. 优点: Python是一种代表简单主义思想的语言, ...

  3. python多进程原理_python多进程的详细介绍(附示例)

    本篇文章给大家带来的内容是关于PHP中的SAPI是什么?如何实现?(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 进程 Python是运行在解释器中的语言,查找资料知道,py ...

  4. python gil原理_Python GIL深入浅出

    概述 GIL(Global Interpreter Lock)是什么东东?为什么当一些Pythoners在开发一些多线程操作的时候,都会有些很多疑问?多线程真的很糟糕吗?我该如何实现多线程并发操作?今 ...

  5. python语言属于科学计算语言吗_python语言属于( )

    [单选题]以下不属于Python语言保留字的是( ) [填空题]假定用2个字节存储整数.无符号整数的机器码FFFFH对应的真值是 ,无符号整数的机器码8000H对应的真值是 ;有符号整数的机器码FFF ...

  6. python语言结构_Python语言表示语句结构时采用

    Python语言表示语句结构时采用 答: 缩进 夏代出现专门的教射和习射的场所是 . 答:序 五行相生相克,又分别对应五种颜色,其中火对应颜色() 答:赤 非暴力沟通中的"表达情绪" ...

  7. python常考题_Python语言基础考察点:python语言基础常见考题(一)

    一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...

  8. 学python的前提_Python语言学习前提:条件语句

    一.条件语句 1.条件语句:通过一条或多条语句的执行结果(True或False)来决定执行额代码块.python程序语言指定任何非0或非空(null)的值为true,0或null为false. 2. ...

  9. 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 ...

最新文章

  1. ThreadLocal的设计与实现
  2. 用div来创建田字布局
  3. 比较 J2EE,eclipse adt扩展和Android studio几个类似IDE菜单的异同点
  4. linux csi驱动添加,CSI接口Camera驱动学习
  5. esp8266时钟_ESP8266(Non-OS SDK) 驱动 waveshare 2.9 寸墨水屏(二)- 程序移植、修改与测试
  6. HSV颜色空间转RGB(C语言代码),ESP32使用RMT驱动WS2812B,七彩流光灯光效果
  7. poj japan 数状数组解决逆序数
  8. MAC OS修改hosts
  9. 我的2020年终回顾:人生,海海,破浪前行
  10. adobe photoshop cs6 安装
  11. 新手小白如何选择吉他,初学者的入门吉他推荐
  12. 嘀嘀的费用是优步的两倍?
  13. 医疗对话摘要论文阅读笔记
  14. 居于mtk芯片安卓车机系统具体流程
  15. 花生日记,购物省钱还能赚钱,淘宝天猫优惠券一网打尽!2018,你还打算将错就错继续做微商吗?...
  16. php 结合md5的加密,解密方法
  17. echarts导出excel报表
  18. CVE-2018-7900:华为部分型号路由器曝信息泄露漏洞
  19. 油烟排放浓度监控系统在浙江省环保治理的应用
  20. Apache HBase 快照(Snapshots) 介绍

热门文章

  1. R数据分析|标准化回归系数
  2. 多节点CDN缓存加速系统wdcdn
  3. 攻防世界web新手区(来自小白)*-*
  4. 【自动控制原理】拉普拉斯变换
  5. 深度认识Camera RAW
  6. 中国药用玻璃包装行业市场调研2023年
  7. c语言正弦波峰峰值,STM32-正弦波可调(50HZ~20KHZ可调、峰峰值0~3.3V可调)
  8. dedecms织梦如何随机调取文章
  9. 浅谈逻辑地址和物理地址
  10. Seata之Server端 Win系统和 Linux系统搭建