Python源码剖析-深度探索动态语言核心技术

本文深入剖析Python源码,探讨Python内建对象的实现,包括Python对象的基石PyObject、类型对象、多态性、引用计数和对象分类。详细介绍了整数对象的创建和维护,揭示了Python对象在C层的内部结构和行为。
摘要由CSDN通过智能技术生成

内容简介

为了更好地利用python语言,无论是python本身还是和C/C++配合使用,深刻理解python的运行原理都是非常重要的,本文以CPython源码为研究对象,深入剖析Python的实现。主要包含:

  • Python内建对象
  • Python虚拟机
  • Python高级特性

本文参考: Python源码剖析一书

学习建议:唯有亲身尝试,才能深解其中三昧。 在真实的源码和文章的描述相比较揣摩,动手捣鼓捣鼓Python的源码,用真实的输出来验证文章描述和自己的理解。

Python 总体架构

首先我们应该了解python的整体架构,对python 有个宏观的认识。

Python整体架构分为三部分,如下图:

  • 左边是python提供的大量模块,库,以及用户自定义模块
  • 右边是python的运行时环境,包括对象/类型系统, 内存分配器, 运行时状态信息。
  • 中间部分为解释器(虚拟机), 包括词法分析,语法分析,编译器与 (虚拟机Code Evauator)
    在这里插入图片描述

Python源代码的组织

获取源码网站: 源码网站

在这里插入图片描述

解压后我们将看到目录结构:

  • Includes : 该目录包含了python提供的所有头文件,我们如果用c、c++编写自定义模块扩展python,就需要用到这里提供的头文件
  • Lib:包含了python自带的所有标准库, lib 中的库都是用python编写而成
  • Modules: 该模块包含了所有用C语言编写的模块, 比如random,cstringIO等,其中模块都是那些对速度要求非常严格的模块, (对速度没有严格要求的放在了lib中)
  • Parser: 包含了python解释器中的词法分析Scanner和语法分析 Parser部分
  • Objects: 改目录中包含了所有Python的内建对象,包括整数,list, dict等, 同时包含了Python在运行时需要的所有的内部使用对象的实现。
  • Python:是Python解释器的 Compiler 和执行引擎部分,是其运行的核心所在。

在这里插入图片描述

第一部分:Python内建对象

第1章:Python对象初探

我们熟知在面向对象理论中的 “类” 和 “对象” 这两个概念在python中都是使用Python内对象来实现的,也可以理解为一切都是对象, 于是我们将会带着一些疑问进入本章~

  1. 对象在python内部是如何表示的? (在C的层面,是个什么模样)
  2. C不是一个面向对象的语言,那么python的对象机制又是如何实现的呢?

额外一些有意思的相关知识:

  • 在Python中,对象是C中结构体在堆上申请的一块内存,因此对象不能被静态初始化,也不能在栈上生存,例外是(Python的类型对象type,都是被静态初始化的 ~)
  • 在Python中,一个对象一旦被创建,其内存大小就是不变的了,于是python在对象内维护一个指向一块可变大小的内存区域的指针来容纳可变长度数据的对象,当然这也是因为遵循这样的规则是的通过指针维护对象的工作变得简单。(struct _typeobject *ob_type)

1.1 Python内的对象

1.1.1 对象的基石-----PyObject

所有的对象都拥有一些相同的内容, 这些内容就在PyObject中定义, PyObject是整个Python对象体系的核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值