人人都会AI编程

3.1 CPython 整体架构:解释器、编译器、虚拟机、内置对象

更新时间:2026-07-12

在安装 Python 时,你实际上安装的是一个叫做 CPython 的东西。它是 Python 语言最权威、使用最广的实现,用 C 语言写成。当我们说“Python 执行代码”时,通常就是指 CPython 在执行。理解它的整体架构,能够帮你弄清楚 Python 程序到底是怎么跑起来的,以及为什么在某些场景下它会快或慢。

整体组成与角色分工

CPython 内部主要分为四个核心部件:

  1. 编译器(Compiler)

负责把 .py 源文件转换成字节码(.pyc 文件)。
这不是传统 C/C++ 那种编译到机器码的编译器,而是编译到一种平台无关的、更底层的中间表示形式
过程是:源码 → 词法分析(拆成一个个 token)→ 语法分析(形成抽象语法树 AST)→ 编译成字节码。

  1. 虚拟机(Virtual Machine, VM)

字节码的实际执行者。
它基于栈的操作模式,逐条读取字节码指令,在运行时去操作数据、调用函数、创建对象等。
由于字节码是平台无关的,虚拟机在 Windows/Linux/macOS 上的行为一致,这是 Python 跨平台的底层基础。

  1. 解释器(Interpreter)

这个词在 Python 语境下常和虚拟机混用,但从架构角度看,“解释器”是指整个 CPython 程序本身,它把编译器、虚拟机、内存管理、内置对象等都封装在一起。
当你敲下 python my_script.py 时,就是启动了解释器进程,它会驱动前面的编译 + 虚拟机执行流程。

  1. 内置对象(Built-in Objects)

Python 中所有东西都是对象(整数、字符串、列表、函数、类……)。
CPython 用 C 语言实现了一套通用对象模型,规定了对象的头结构(引用计数、类型指针等),并为常见类型(intlistdict 等)预先编写了高效的 C 级实现。
这些内置对象是 Python 程序能快速运行的基石。你在写 a = 10 时,其实直接复用了虚拟机内部已经为你准备好的 int 对象机制。

它们是如何协作的?

一次典型的代码执行过程如下:

  1. 你键入 python script.py,操作系统启动 CPython 解释器进程。
  2. 解释器调用内置编译器:读取 script.py,经过词法、语法分析生成 AST,再编译成字节码。此时可以生成 .pyc 缓存文件放在 pycache 目录里。
  3. 解释器把字节码交给虚拟机执行。虚拟机按指令顺序逐条执行:
  • 遇到 LOAD_CONST 指令,从常量池中取出一个对象压入栈。
  • 遇到 CALL_FUNCTION 指令,发起函数调用。
  • 需要创建数字、字符串时,直接调用 内置对象 的相关 C 函数来快速分配内存、初始化值。
  1. 执行过程中,内存分配/释放由 CPython 自带的内存管理系统负责(包括引用计数和垃圾回收),这些都是解释器的一部分。

理解这个架构对你有什么用?

  • 明白“解释执行”不是逐行解释源码:每次执行前都有一个编译到字节码的过程,这比纯文本解释快得多,只是没有编译型语言那么极致的优化。
  • 知道 Python 速度的根在哪里:虚拟机用 C 解释字节码,本身很快,但动态类型决定了每次操作都要检查对象类型,这带来了额外开销。后面你学习性能优化时,就会理解为什么 NumPy 能把密集计算加速——它绕过了 CPython 虚拟机,直接用 C 操作连续内存块。
  • 区分语言与实现:Python 语言的语法和语义是标准,但 CPython 只是最主流的实现。还有 Jython(跑在 JVM 上)、IronPython(.NET 平台)、PyPy(带 JIT 编译器)等其他实现,它们把 Python 代码编译成其他平台的中间语言,但核心思路类似。理解了 CPython 架构,再看其他实现就容易多了。

总之,CPython 通过编译器 + 虚拟机的方式实现了 Python 的程序执行,背后依靠一套高效的C 级内置对象库。整个模型兼顾了开发的便利性和执行的合理性,这也是 Python 能够平衡“快开发”与“够用性能”的工程秘密。