CPython이란

언어 vs 구현체 구분

Python = 언어 명세(specification)

“이 문법은 이렇게 동작해야 한다”는 규칙서

추상적인 약속일 뿐 그 자체로는 안 돌아감

CPython = 그 명세를 실제로 구현한 프로그램

C 언어로 작성된 Python 인터프리터

우리가 Python.org에서 받아 python 치면 실행되는 게 바로 이것

“표준 구현체”라서 사싱상 Python = CPython으로 통함

Java로 비유하면 아래와 같음:

Java 언어 명세(JLS)          ←→   Python 언어 명세
JVM 구현체들                 ←→   Python 구현체들
  ├ HotSpot (오라클, 표준)         ├ CPython (C, 표준)   ← 99% 이게 쓰임
  ├ OpenJ9 (IBM)                ├ PyPy (JIT, 빠름)
  └ GraalVM                     ├ Jython (JVM 위에서 돎)
                                └ IronPython (.NET 위)

CPython의 객체 표현 - 모든 게 PyObject

CPython에서 모든 객체는 C 구조체 PyObject 이고, 최소한 둘을 항상 들고 있음

CPython의 메모리 관리 - 참조 카운팅 + 세대별 GC

이건 CPython만의 방식(Jython/IronPython은 호스트 GC를 빌려 씀)

[Python] 기본 개념 “에 포함되는 내용

참조 카운팅(주력):

객체마다 참조 수를 세어 0이 되는 즉시 해제

결정론적이라 리소스 정리 타이밍이 예측 가능(= with 로 파일이 즉시 닫히는 이유)

단, **순환 참조(서로 물고 있는 구조)**면 카운트가 0이 안되어 못 풀음