How Python is Implemented
The language vs the implementation
The Python language is defined by a specification and a reference implementation, not by a single source language. When people ask what Python is "written in," they almost always mean CPython, because it is the interpreter nearly everyone runs. CPython's bytecode interpreter, object model, memory manager, and C API are written in C. The C standard library underneath gives Python its low-level system access, threading, and file I/O.
How CPython runs your code
CPython does not execute Python text directly. It first compiles each module to bytecode (cached as .pyc files) and then runs that bytecode in a loop written in C, the CPython virtual machine. A detail that comes from this design is the Global Interpreter Lock (GIL), a mechanism in the C interpreter that lets only one thread execute Python bytecode at a time; recent CPython releases have begun offering an experimental "free-threaded" build that removes it. The reference source lives at github.com/python/cpython.
Alternative Python implementations
| Implementation | Written in | Why use it |
|---|---|---|
| CPython | C | The reference interpreter and default runtime |
| PyPy | RPython | JIT compilation, often several times faster on long-running code |
| Jython | Java | Runs Python on the JVM with Java interop |
| IronPython | C# | Runs Python on the .NET runtime |
| MicroPython | C | A tiny Python for microcontrollers |
Is Python self-hosting?
No. The standard interpreter, CPython, is written in C, not Python, so Python is not self-hosting the way Rust or Go are. PyPy comes closest: it is written in RPython, a restricted subset of Python designed to be analyzable and compilable to C.
History and influences
Python was created by Guido van Rossum, who began it at CWI in the Netherlands in 1989 and released it in 1991. Its readability and design come directly from the ABC language, where van Rossum had previously worked, with further influence from Modula-3, C, and Lisp. Python in turn influenced Ruby, CoffeeScript, Swift, and many others. See the Python page for the full, sourced relationship map.
View Python in Graph →