CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse...

77

Transcript of CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse...

Page 1: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi
Page 2: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$1ZUIPO *OUFSOBMT� :PVS (VJEF UP UIF

1ZUIPO � *OUFSQSFUFS

"OUIPOZ 4IBX

Page 3: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$1ZUIPO *OUFSOBMT� :PVS (VJEF UP UIF 1ZUIPO � *OUFSQSFUFS

"OUIPOZ 4IBX

$PQZSJHIU j 3FBM 1ZUIPO SFBMQZUIPO�DPN ������

'PS POMJOF JOGPSNBUJPO BOE PSEFSJOH PG UIJT BOE PUIFS CPPLT CZ 3FBM

1ZUIPO QMFBTF WJTJU SFBMQZUIPO�DPN� 'PS NPSF JOGPSNBUJPO QMFBTF

DPOUBDU VT BU JOGP!SFBMQZUIPO�DPN�

*4#/� ������������� QBQFSCBDL

*4#/� ������������� FMFDUSPOJD

$PWFS EFTJHO CZ "MESFO 4BOUPT

ψ1ZUIPOω BOE UIF 1ZUIPO MPHPT BSF USBEFNBSLT PS SFHJTUFSFE USBEF�

NBSLT PG UIF 1ZUIPO 4PGUXBSF 'PVOEBUJPO VTFE CZ 3FBM 1ZUIPO XJUI

QFSNJTTJPO GSPN UIF 'PVOEBUJPO�

5IBOL ZPV GPS EPXOMPBEJOH UIJT FCPPL� 5IJT FCPPL JT MJDFOTFE GPS

ZPVS QFSTPOBM FOKPZNFOU POMZ� 5IJT FCPPL NBZ OPU CF SF�TPME PS

HJWFO BXBZ UP PUIFS QFPQMF� *G ZPV XPVME MJLF UP TIBSF UIJT CPPL

XJUI BOPUIFS QFSTPO QMFBTF QVSDIBTF BO BEEJUJPOBM DPQZ GPS FBDI

SFDJQJFOU� *G ZPVυSF SFBEJOH UIJT CPPL BOE EJE OPU QVSDIBTF JU

PS JU XBT OPU QVSDIBTFE GPS ZPVS VTF POMZ UIFO QMFBTF SFUVSO UP

SFBMQZUIPO�DPN�DQZUIPO�JOUFSOBMT BOE QVSDIBTF ZPVS PXO DPQZ�

5IBOL ZPV GPS SFTQFDUJOH UIF IBSE XPSL CFIJOE UIJT CPPL�

Page 4: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IJT JT B TBNQMF GSPN ω$1ZUIPO *OUFSOBMT� :PVS

(VJEF UP UIF 1ZUIPO � *OUFSQSFUFSϊ

8JUI UIJT CPPL ZPVυMM DPWFS UIF DSJUJDBM DPODFQUT CFIJOE UIF JOUFSOBMT PG

$1ZUIPO BOE IPX UIFZ XPSL XJUI WJTVBM FYQMBOBUJPOT BT ZPV HP BMPOH�

:PVυMM VOEFSTUBOE UIF DPODFQUT JEFBT BOE UFDIOJDBMJUJFT PG $1ZUIPO JO

BO BQQSPBDIBCMF BOE IBOET�PO GBTIJPO� "U UIF FOE PG UIF CPPL ZPVυMM

CF BCMF UP�

ύ 8SJUF DVTUPN FYUFOTJPOT GPS 1ZUIPO XSJUUFO JO UIF $ QSPHSBN�

NJOH MBOHVBHF UIF CPPL JODMVEFT BO ψ*OUSP UP $ GPS 1ZUIPOJTUBTω

DIBQUFS

ύ 6TF ZPVS EFFQ LOPXMFEHF PG UIF $1ZUIPO JOUFSQSFUFS UP JNQSPWF

ZPVS PXO 1ZUIPO BQQMJDBUJPOT

ύ $POUSJCVUF UP UIF $1ZUIPO QSPKFDU BOE TUBSU ZPVS KPVSOFZ UPXBSET

CFDPNJOH B 1ZUIPO $PSF %FWFMPQFS

*G ZPV FOKPZFE UIF TBNQMF DIBQUFST ZPV DBO QVSDIBTF B GVMM

WFSTJPO PG UIF CPPL BU SFBMQZUIPO�DPN�DQZUIPO�JOUFSOBMT

Page 5: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

8IBU 3FBEFST 4BZ "CPVU $1ZUIPO *OUFSOBMT� :PVS (VJEF UP

UIF 1ZUIPO � *OUFSQSFUFS

ψ" DPNQSFIFOTJWF XBMLUISPVHI PG UIF 1ZUIPO JOUFSOBMT B UPQJD XIJDI

TVSQSJTJOHMZ IBT BMNPTU OP HPPE SFTPVSDF JO BO FBTZ�UP�VOEFSTUBOE

NBOOFS GPS CPUI CFHJOOFST BT XFMM BT BEWBODFE 1ZUIPO VTFST�ω

ρ "CIJTIFL 4IBSNB %BUB 4DJFOUJTU

ψ5IF τ1BSBMMFMJTN BOE $PODVSSFODZυ DIBQUFS JT POF PG NZ GBWPSJUFT� *

IBE CFFO MPPLJOH UP HFU BO JO EFQUI VOEFSTUBOEJOH BSPVOE UIJT UPQJD

BOE * GPVOE ZPVS CPPL FYUSFNFMZ IFMQGVM�

0G DPVSTF BGUFS HPJOH PWFS UIBU DIBQUFS * DPVMEOυU SFTJTU UIF SFTU� * BN

FBHFSMZ MPPLJOH GPSXBSE UP IBWF NZ PXO QSJOUFE DPQZ PODF JUυT PVU�

* IBE HPOF UISPVHI ZPVS τ(VJEF UP $1ZUIPO 4PVSDF DPEFυ BSUJDMF QSFWJ�

PVTMZ XIJDI HPU NF JOUFSFTUFE JO пOEJOH PVU NPSF BCPVU UIF JOUFSOBMT�

5IFSF BSF B UPO PG CPPLT PO 1ZUIPO XIJDI UFBDI UIF MBOHVBHF CVU *

IBWFOυU SFBMMZ DPNF BDSPTT BOZUIJOH UIBU XPVME HP BCPVU FYQMBJOJOH

UIF JOUFSOBMT UP UIPTF DVSJPVT NJOEFE�

"OE XIJMF * UFBDI 1ZUIPO UP NZ EBVHIUFS DVSSFOUMZ * IBWF UIJT CPPL

BEEFE JO IFSNVTU�SFBE MJTU� 4IFυT DVSSFOUMZ TUVEZJOH *OGPSNBUJPO 4ZT�

UFNT BU (FPSHJB 4UBUF 6OJWFSTJUZ�ω

ρ.JMBO 1BUFM 7JDF 1SFTJEFOU BU B NBKPS JOWFTUNFOU CBOL

Page 6: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

ψ8IBU JNQSFTTFT NF UIF NPTU BCPVU "OUIPOZυT CPPL JT IPX JU QVUT BMM

UIF TUFQT GPS NBLJOH DIBOHFT UP UIF $1ZUIPO DPEF CBTF JO BO FBTZ UP

GPMMPX TFRVFODF� *U SFBMMZ GFFMT MJLF B τNJTTJOH NBOVBMυ PG TPSUT�

%JWJOH JOUP UIF $ VOEFSQJOOJOHT PG 1ZUIPO XBT B MPU PG GVO BOE JU

DMFBSFE VQ TPNF MPOHTUBOEJOH RVFTUJPOT NBSLT GPS NF� * GPVOE UIF

DIBQUFS BCPVU $1ZUIPOυT NFNPSZ BMMPDBUPS FTQFDJBMMZ FOMJHIUFOJOH�

$1ZUIPO *OUFSOBMT JT B HSFBU BOE VOJRVF SFTPVSDF GPS BOZCPEZ MPPL�

JOH UP UBLF UIFJS LOPXMFEHF PG 1ZUIPO UP B EFFQFS MFWFM�ω

ρ %BO #BEFS "VUIPS PG 1ZUIPO 5SJDLT BOE &EJUPS�JO�$IJFG BU

3FBM 1ZUIPO

ψ5IJT CPPL IFMQFE NF UP CFUUFS VOEFSTUBOE IPX MFYJOH BOE QBSTJOH

XPSLT JO 1ZUIPO� *UυT NZ SFDPNNFOEFE TPVSDF JG ZPV XBOU UP VOEFS�

TUBOE JU�ω

ρ 'MPSJBO %BIMJU[ 1ZUIPOJTUB

Page 7: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

"DLOPXMFEHFNFOUT

5IBOL ZPV UP NZ XJGF 7FSJUZ GPS IFS TVQQPSU BOE QBUJFODF� 8JUIPVU

IFS UIJT XPVMEOυU CF QPTTJCMF�

5IBOL ZPV UP FWFSZPOF XIP IBT TVQQPSUFE NF PO UIJT KPVSOFZ�

π "OUIPOZ 4IBX

Page 8: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

"CPVU UIF "VUIPS

"OUIPOZ 4IBX JT BO BWJE 1ZUIPOJTUB BOE 'FMMPX PG UIF 1ZUIPO 4PGU�

XBSF 'PVOEBUJPO�

"OUIPOZ IBT CFFO QSPHSBNNJOH TJODF UIF BHF PG �� BOE GPVOE B MPWF

GPS 1ZUIPO XIJMF USBQQFE JOTJEF B IPUFM JO 4FBUUMF 8BTIJOHUPO ��

ZFBST MBUFS� "GUFS EJUDIJOH UIF PUIFS MBOHVBHFT IFυE MFBSOFE "OUIPOZ

IBT CFFO SFTFBSDIJOH XSJUJOH BCPVU BOE DSFBUJOH DPVSTFT GPS 1ZUIPO

FWFS TJODF�

"OUIPOZ BMTP DPOUSJCVUFT UP TNBMM BOE MBSHF 0QFO 4PVSDF QSPKFDUT JO�

DMVEJOH $1ZUIPO BT XFMM BT CFJOH B NFNCFS PG UIF "QBDIF 4PGUXBSF

'PVOEBUJPO�

"OUIPOZυT QBTTJPO MJFT JO VOEFSTUBOEJOH DPNQMFY TZTUFNT UIFO TJN�

QMJGZJOH UIFN BOE UFBDIJOH UIFN UP QFPQMF�

"CPVU UIF 3FWJFX 5FBN

+JN "OEFSTPO IBT CFFO QSPHSBNNJOH GPS B MPOH UJNF JO B WBSJFUZ

PG MBOHVBHFT� )F IBT XPSLFE PO FNCFEEFE TZTUFNT CVJMU EJTUSJCVUFE

CVJME TZTUFNT EPOF Pм�TIPSF WFOEPS NBOBHFNFOU BOE TBU JO NBOZ

NBOZ NFFUJOHT�

Page 9: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$POUFOUT

$POUFOUT �

'PSFXPSE ��

*OUSPEVDUJPO ��

)PX UP 6TF 5IJT #PPL � � � � � � � � � � � � � � � � � � � � ��

#POVT .BUFSJBM � -FBSOJOH 3FTPVSDFT � � � � � � � � � � � ��

(FUUJOH UIF $1ZUIPO 4PVSDF $PEF ��

4FUUJOH VQ :PVS %FWFMPQNFOU &OWJSPONFOU ��

*%& PS &EJUPS � � � � � � � � � � � � � � � � � � � � � � � � ��

4FUUJOH VQ 7JTVBM 4UVEJP � � � � � � � � � � � � � � � � � � � ��

4FUUJOH VQ 7JTVBM 4UVEJP $PEF � � � � � � � � � � � � � � � � ��

4FUUJOH VQ +FU#SBJOT $-JPO � � � � � � � � � � � � � � � � � ��

4FUUJOH VQ 7JN � � � � � � � � � � � � � � � � � � � � � � � � ��

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ��

$PNQJMJOH $1ZUIPO ��

$PNQJMJOH $1ZUIPO PO NBD04 � � � � � � � � � � � � � � � ��

$PNQJMJOH $1ZUIPO PO -JOVY � � � � � � � � � � � � � � � � ��

*OTUBMMJOH B $VTUPN 7FSTJPO � � � � � � � � � � � � � � � � � ��

" 2VJDL 1SJNFS PO .BLF � � � � � � � � � � � � � � � � � � ��

$1ZUIPOυT .BLF 5BSHFUT � � � � � � � � � � � � � � � � � � � ��

$PNQJMJOH $1ZUIPO PO 8JOEPXT � � � � � � � � � � � � � � ��

1SPнMF (VJEFE 0QUJNJ[BUJPO � � � � � � � � � � � � � � � � ��

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ��

Page 10: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$POUFOUT

5IF 1ZUIPO -BOHVBHF BOE (SBNNBS ��

8IZ $1ZUIPO *T 8SJUUFO JO $ BOE /PU 1ZUIPO � � � � � � � ��

5IF 1ZUIPO -BOHVBHF 4QFDJнDBUJPO � � � � � � � � � � � � � ��

6TJOH UIF 1BSTFS (FOFSBUPS � � � � � � � � � � � � � � � � � ��

5IF 1BSTFS (FOFSBUPS � � � � � � � � � � � � � � � � � � � � ��

3FHFOFSBUJOH (SBNNBS � � � � � � � � � � � � � � � � � � � ��

" .PSF $PNQMFY &YBNQMF � � � � � � � � � � � � � � � � � � ��

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ��

$POрHVSBUJPO BOE *OQVU ��

$POнHVSBUJPO 4UBUF � � � � � � � � � � � � � � � � � � � � � ��

#VJME $POнHVSBUJPO � � � � � � � � � � � � � � � � � � � � � ��

#VJMEJOH B .PEVMF 'SPN *OQVU � � � � � � � � � � � � � � � ��

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ��

-FYJOH BOE 1BSTJOH XJUI 4ZOUBY 5SFFT ��

$PODSFUF 4ZOUBY 5SFF (FOFSBUJPO � � � � � � � � � � � � � � ��

5IF $1ZUIPO 1BSTFS�5PLFOJ[FS � � � � � � � � � � � � � � � ��

"CTUSBDU 4ZOUBY 5SFFT � � � � � � � � � � � � � � � � � � � � ���

*NQPSUBOU 5FSNT UP 3FNFNCFS � � � � � � � � � � � � � � � ���

&YBNQMF� "EEJOH BO "MNPTU &RVBM $PNQBSJTPO 0QFSBUPS � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

5IF $PNQJMFS ���

3FMBUFE 4PVSDF 'JMFT � � � � � � � � � � � � � � � � � � � � � ���

*NQPSUBOU 5FSNT � � � � � � � � � � � � � � � � � � � � � � ���

*OTUBOUJBUJOH B $PNQJMFS � � � � � � � � � � � � � � � � � � ���

'VUVSF 'MBHT BOE $PNQJMFS 'MBHT � � � � � � � � � � � � � � ���

4ZNCPM 5BCMFT � � � � � � � � � � � � � � � � � � � � � � � � ���

$PSF $PNQJMBUJPO 1SPDFTT � � � � � � � � � � � � � � � � � � ���

"TTFNCMZ � � � � � � � � � � � � � � � � � � � � � � � � � � ���

$SFBUJOH B $PEF 0CKFDU � � � � � � � � � � � � � � � � � � � ���

6TJOH *OTUBWJ[ UP 4IPX B $PEF 0CKFDU � � � � � � � � � � � � ���

&YBNQMF� *NQMFNFOUJOH UIF ψ"MNPTU�&RVBMω 0QFSBUPS � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

Page 11: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$POUFOUT

5IF &WBMVBUJPO -PPQ ���

4UBDL 'SBNFT � � � � � � � � � � � � � � � � � � � � � � � � ���

3FMBUFE 4PVSDF 'JMFT � � � � � � � � � � � � � � � � � � � � � ���

*NQPSUBOU 5FSNT � � � � � � � � � � � � � � � � � � � � � � ���

$POTUSVDUJOH 5ISFBE 4UBUF � � � � � � � � � � � � � � � � � ���

$POTUSVDUJOH 'SBNF 0CKFDUT � � � � � � � � � � � � � � � � � ���

'SBNF &YFDVUJPO � � � � � � � � � � � � � � � � � � � � � � ���

5IF 7BMVF 4UBDL � � � � � � � � � � � � � � � � � � � � � � � ���

&YBNQMF� "EEJOH BO *UFN UP B -JTU � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

.FNPSZ .BOBHFNFOU ���

.FNPSZ "MMPDBUJPO JO $ � � � � � � � � � � � � � � � � � � � ���

%FTJHO PG UIF 1ZUIPO .FNPSZ .BOBHFNFOU 4ZTUFN � � � � ���

5IF $1ZUIPO .FNPSZ "MMPDBUPS � � � � � � � � � � � � � � � ���

5IF 0CKFDU BOE 1Z.FN .FNPSZ "MMPDBUJPO %PNBJOT � � � ���

5IF 3BX .FNPSZ "MMPDBUJPO %PNBJO � � � � � � � � � � � � ���

$VTUPN %PNBJO "MMPDBUPST � � � � � � � � � � � � � � � � � ���

$VTUPN .FNPSZ "MMPDBUJPO 4BOJUJ[FST � � � � � � � � � � � ���

5IF 1Z"SFOB .FNPSZ "SFOB � � � � � � � � � � � � � � � � ���

3FGFSFODF $PVOUJOH � � � � � � � � � � � � � � � � � � � � � ���

(BSCBHF $PMMFDUJPO � � � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

1BSBMMFMJTN BOE $PODVSSFODZ ���

.PEFMT PG 1BSBMMFMJTN BOE $PODVSSFODZ � � � � � � � � � � � ���

5IF 4USVDUVSF PG B 1SPDFTT � � � � � � � � � � � � � � � � � � ���

.VMUJ�1SPDFTT 1BSBMMFMJTN � � � � � � � � � � � � � � � � � � ���

.VMUJUISFBEJOH � � � � � � � � � � � � � � � � � � � � � � � ���

"TZODISPOPVT 1SPHSBNNJOH � � � � � � � � � � � � � � � � ���

(FOFSBUPST � � � � � � � � � � � � � � � � � � � � � � � � � � ���

$PSPVUJOFT � � � � � � � � � � � � � � � � � � � � � � � � � � ���

"TZODISPOPVT (FOFSBUPST � � � � � � � � � � � � � � � � � � ���

4VCJOUFSQSFUFST � � � � � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��

Page 12: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$POUFOUT

0CKFDUT BOE 5ZQFT ���

&YBNQMFT JO 5IJT $IBQUFS � � � � � � � � � � � � � � � � � � ���

#VJMUJO 5ZQFT � � � � � � � � � � � � � � � � � � � � � � � � ���

0CKFDU BOE 7BSJBCMF 0CKFDU 5ZQFT � � � � � � � � � � � � � � ���

5IF W\SH 5ZQF � � � � � � � � � � � � � � � � � � � � � � � � ���

#PPM BOE -POH *OUFHFS 5ZQF � � � � � � � � � � � � � � � � � ���

6OJDPEF 4USJOH 5ZQF � � � � � � � � � � � � � � � � � � � � � ���

%JDUJPOBSZ 5ZQF � � � � � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

5IF 4UBOEBSE -JCSBSZ ���

1ZUIPO .PEVMFT � � � � � � � � � � � � � � � � � � � � � � � ���

1ZUIPO BOE $ .PEVMFT � � � � � � � � � � � � � � � � � � � ���

5IF 5FTU 4VJUF ���

3VOOJOH UIF 5FTU 4VJUF PO 8JOEPXT � � � � � � � � � � � � ���

3VOOJOH UIF 5FTU 4VJUF PO -JOVY�NBD04 � � � � � � � � � � ���

5FTU 'MBHT � � � � � � � � � � � � � � � � � � � � � � � � � � ���

3VOOJOH 4QFDJнD 5FTUT � � � � � � � � � � � � � � � � � � � ���

5FTUJOH .PEVMFT � � � � � � � � � � � � � � � � � � � � � � � ���

5FTU 6UJMJUJFT � � � � � � � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

%FCVHHJOH ���

6TJOH UIF $SBTI )BOEMFS � � � � � � � � � � � � � � � � � � ���

$PNQJMJOH %FCVH 4VQQPSU � � � � � � � � � � � � � � � � � � ���

6TJOH -MEC GPS NBD04 � � � � � � � � � � � � � � � � � � � � ���

6TJOH (EC � � � � � � � � � � � � � � � � � � � � � � � � � � ���

6TJOH 7JTVBM 4UVEJP %FCVHHFS � � � � � � � � � � � � � � � � ���

6TJOH $-JPO %FCVHHFS � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��

Page 13: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$POUFOUT

#FODINBSLJOH 1SPрMJOH BOE 5SBDJOH ���

6TJOH 5JNFJU GPS .JDSP�#FODINBSLT � � � � � � � � � � � � ���

6TJOH UIF 1ZUIPO #FODINBSL 4VJUF GPS 3VOUJNF #FODINBSLT ���

1SPнMJOH 1ZUIPO $PEF XJUI D1SPнMF � � � � � � � � � � � � � ���

1SPнMJOH $ $PEF XJUI %USBDF � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO ���

8SJUJOH $ &YUFOTJPOT GPS $1ZUIPO � � � � � � � � � � � � � ���

6TJOH 5IJT ,OPXMFEHF UP *NQSPWF :PVS 1ZUIPO "QQMJDBUJPOT ���

6TJOH 5IJT ,OPXMFEHF UP $POUSJCVUF UP UIF $1ZUIPO 1SPKFDU ���

,FFQ -FBSOJOH � � � � � � � � � � � � � � � � � � � � � � � � ���

"QQFOEJY � � *OUSPEVDUJPO UP $ GPS 1ZUIPO 1SPHSBNNFST ���

$ 1SFQSPDFTTPS � � � � � � � � � � � � � � � � � � � � � � � ���

#BTJD $ 4ZOUBY � � � � � � � � � � � � � � � � � � � � � � � � ���

$PODMVTJPO � � � � � � � � � � � � � � � � � � � � � � � � � � ���

��

Page 14: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

'PSFXPSE

ψ" QSPHSBNNJOH MBOHVBHF DSFBUFE CZ B DPNNVOJUZ GPT�

UFST IBQQJOFTT JO JUT VTFST BSPVOE UIF XPSME�ω

ρ (VJEP WBO 3PTTVN ,JOHυT %BZ 4QFFDI ����

* MPWF CVJMEJOH UPPMT UIBU IFMQ VT MFBSO FNQPXFS VT UP DSFBUF BOE

NPWF VT UP TIBSF LOPXMFEHF BOE JEFBT XJUI PUIFST� * GFFM IVNCMFE

UIBOLGVM BOE QSPVE XIFO * IFBS IPX UIFTF UPPMT BOE 1ZUIPO BSF

IFMQJOH ZPV UP TPMWF SFBM�XPSME QSPCMFNT MJLF DMJNBUF DIBOHF PS

"M[IFJNFSυT�

5ISPVHINZ ψGPVS EFDBEFTω MPWF PG QSPHSBNNJOH BOEQSPCMFNTPMWJOH

* IBWF TQFOU UJNF MFBSOJOH XSJUJOH B MPU PG DPEF BOE TIBSJOH NZ JEFBT

XJUI PUIFST� *υWF TFFO QSPGPVOE DIBOHFT JO UFDIOPMPHZ BT UIF XPSME

QSPHSFTTFE GSPNNBJOGSBNFT UP DFMM QIPOF TFSWJDF UP UIFXJEF�SBOHJOH

XPOEFST PG UIF XFC BOE DMPVE DPNQVUJOH� "MM PG UIFTF UFDIOPMPHJFT

JODMVEJOH 1ZUIPO IBWF POF UIJOH JO DPNNPO�

"U POFNPNFOU UIFTF TVDDFTTGVM JOOPWBUJPOT XFSF OPUIJOHNPSF UIBO

BO JEFB� 5IF DSFBUPST MJLF (VJEP IBE UP UBLF SJTLT BOE MFBQT PG GBJUI

UP NPWF GPSXBSE� %FEJDBUJPO MFBSOJOH UISPVHI USJBM BOE FSSPS BOE

XPSLJOH UISPVHI NBOZ GBJMVSFT UPHFUIFS CVJMU B TPMJE GPVOEBUJPO GPS

TVDDFTT BOE HSPXUI�

$1ZUIPO *OUFSOBMTXJMM UBLF ZPV PO B KPVSOFZ UP FYQMPSF UIF XJMEMZ TVD�

DFTTGVM MBOHVBHF 1ZUIPO� 5IF CPPL TFSWFT BT B HVJEFCPPL GPS MFBSO�

JOH IPX $1ZUIPO JT DSFBUFE VOEFS UIF IPPE� *U XJMM HJWF ZPV B HMJNQTF

PG IPX UIF DPSF EFWFMPQFST DSBGUFE UIF MBOHVBHF� 1ZUIPOυT TUSFOHUIT

��

Page 15: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$POUFOUT

JODMVEF JUT SFBEBCJMJUZ BOE B XFMDPNJOH DPNNVOJUZ EFEJDBUFE UP FEV�

DBUJPO� "OUIPOZ FNCSBDFT UIFTF TUSFOHUIT XIFO FYQMBJOJOH $1ZUIPO

FODPVSBHJOH ZPV UP SFBE UIF TPVSDF BOE TIBSJOH UIF CVJMEJOH CMPDLT

PG UIF MBOHVBHF XJUI ZPV�

8IZEP *XBOU UP TIBSF"OUIPOZυT$1ZUIPO *OUFSOBMTXJUI ZPV *UυT UIF

CPPL UIBU * XJTI FYJTUFE ZFBST BHP XIFO * TUBSUFE NZ 1ZUIPO KPVSOFZ�

.PSF JNQPSUBOUMZ * CFMJFWF XF BT NFNCFST PG UIF 1ZUIPO DPNNV�

OJUZ IBWF B VOJRVF PQQPSUVOJUZ π UP QVU PVS FYQFSUJTF UP XPSL UP IFMQ

TPMWF UIF DPNQMFY SFBM�XPSME QSPCMFNT GBDJOH VT� *υN DPOнEFOU BGUFS

SFBEJOH UIJT CPPL ZPVS TLJMMT XJMM HSPX BOE ZPV XJMM CF BCMF TPMWF FWFO

NPSF DPNQMFY QSPCMFNT UIBU DBO JNQSPWF PVS XPSME�

*UυT NZ IPQF UIBU "OUIPOZ NPUJWBUFT ZPV UP MFBSO NPSF BCPVU 1ZUIPO

JOTQJSF ZPV UP CVJME JOOPWBUJWF UIJOHT BOE HJWF ZPV DPOнEFODF UP

TIBSF ZPVS DSFBUJPOT XJUI UIF XPSME�

ψ/PX JT CFUUFS UIBO /FWFS�ω

ρ 5JN 1FUFST 5IF ;FO PG 1ZUIPO

-FUυT GPMMPX 5JNυT XJTEPN BOE HFU TUBSUFE OPX�

8BSNMZ

ρ$BSPM8JMMJOH $1ZUIPO$PSF%FWFMPQFS �.FNCFS PG UIF $1ZUIPO

4UFFSJOH $PVODJM

��

Page 16: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

*OUSPEVDUJPO

"SF UIFSF DFSUBJO QBSUT PG 1ZUIPO UIBU KVTU TFFN NBHJD -JLF IPX EJD�

UJPOBSJFT BSF TP NVDI GBTUFS UIBO MPPQJOH PWFS B MJTU UP нOE BO JUFN�

)PX EPFT B HFOFSBUPS SFNFNCFS UIF TUBUF PG UIF WBSJBCMFT FBDI UJNF

JU ZJFMET B WBMVF BOE XIZ EP ZPV OFWFS IBWF UP BMMPDBUF NFNPSZ MJLF

PUIFS MBOHVBHFT *U UVSOT PVU $1ZUIPO UIFNPTU QPQVMBS 1ZUIPO SVO�

UJNF JT XSJUUFO JO IVNBO�SFBEBCMF $ BOE 1ZUIPO DPEF�

$1ZUIPO BCTUSBDUT UIF DPNQMFYJUJFT PG UIF VOEFSMZJOH $ QMBUGPSN

BOE ZPVS 0QFSBUJOH 4ZTUFN� *U NBLFT UISFBEJOH DSPTT�QMBUGPSN

BOE TUSBJHIUGPXBSE� *U UBLFT UIF QBJO PG NFNPSZ NBOBHFNFOU JO $

BOE NBLFT JU TJNQMF� $1ZUIPO HJWFT UIF EFWFMPQFS XSJUJOH 1ZUIPO

DPEF UIF QMBUGPSN UP XSJUF TDBMBCMF BOE QFSGPSNBOU BQQMJDBUJPOT� "U

TPNF TUBHF JO ZPVS QSPHSFTTJPO BT B 1ZUIPO EFWFMPQFS ZPV OFFE UP

VOEFSTUBOE IPX $1ZUIPO XPSLT� 5IFTF BCTUSBDUJPOT BSF OPU QFSGFDU

BOE UIFZ BSF MFBLZ�

0ODF ZPV VOEFSTUBOE IPX $1ZUIPO XPSLT ZPV DBO PQUJNJ[F ZPVS BQ�

QMJDBUJPOT BOE GVMMZ MFWFSBHF JUT QPXFS� 5IJT CPPL XJMM FYQMBJO UIF DPO�

DFQUT JEFBT BOE UFDIOJDBMJUJFT PG $1ZUIPO�

*O UIJT CPPL ZPVυMM DPWFS UIF NBKPS DPODFQUT CFIJOE UIF JOUFSOBMT PG

$1ZUIPO BOE MFBSO IPX UP�

ύ 3FBE BOE OBWJHBUF UIF TPVSDF DPEF

ύ $PNQJMF $1ZUIPO GSPN TPVSDF DPEF

ύ .BLF DIBOHFT UP UIF 1ZUIPO TZOUBY BOE DPNQJMF UIFN JOUP ZPVS

WFSTJPO PG $1ZUIPO

��

Page 17: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

)PX UP 6TF 5IJT #PPL

ύ /BWJHBUF BOE DPNQSFIFOE UIF JOOFSXPSLJOHT PG DPODFQUT MJLF MJTUT

EJDUJPOBSJFT BOE HFOFSBUPST

ύ .BTUFS $1ZUIPOυT NFNPSZ NBOBHFNFOU DBQBCJMJUJFT

ύ 4DBMF ZPVS 1ZUIPO DPEF XJUI QBSBMMFMJTN BOE DPODVSSFODZ

ύ .PEJGZ UIF DPSF UZQFT XJUI OFX GVODUJPOBMJUZ

ύ 3VO UIF UFTU TVJUF

ύ 1SPнMF BOE CFODINBSL UIF QFSGPSNBODF PG ZPVS 1ZUIPO DPEF BOE

SVOUJNF

ύ %FCVH $ BOE 1ZUIPO DPEF MJLF B QSPGFTTJPOBM

ύ .PEJGZ PS VQHSBEF DPNQPOFOUT PG UIF $1ZUIPO MJCSBSZ UP DPO�

USJCVUF UIFN UP GVUVSF WFSTJPOT

5BLF ZPVS UJNF GPS FBDI DIBQUFS BOE NBLF TVSF ZPV USZ PVU UIF EF�

NPT BOE UIF JOUFSBDUJWF FMFNFOUT� :PV DBO GFFM B TFOTF PG BDIJFWFNFOU

UIBU ZPV HSBTQ UIF DPSF DPODFQUT PG 1ZUIPO UIBU DBO NBLF ZPV B CFUUFS

1ZUIPO QSPHSBNNFS�

)PX UP 6TF 5IJT #PPL

5IJT CPPL JT BMM BCPVU MFBSOJOH CZ EPJOH TP CF TVSF UP TFU VQ ZPVS *%&

FBSMZ JO UIF CPPL VTJOH UIF JOTUSVDUJPOT EPXOMPBEJOH UIF DPEF BOE

XSJUJOH UIF FYBNQMFT�

'PS UIF CFTU SFTVMUT XF SFDPNNFOE UIBU ZPV BWPJE DPQZJOH BOE QBTU�

JOH UIF DPEF FYBNQMFT� 5IF FYBNQMFT JO UIJT CPPL UPPL NBOZ JUFSB�

UJPOT UP HFU SJHIU BOE UIFZ NBZ BMTP DPOUBJO CVHT�

.BLJOH NJTUBLFT BOE MFBSOJOH IPX UP нY UIFN JT QBSU PG UIF MFBSOJOH

QSPDFTT� :PV NJHIU EJTDPWFS CFUUFS XBZT UP JNQMFNFOU UIF FYBNQMFT

USZ DIBOHJOH UIFN BOE TFFJOH XIBU FмFDU JU IBT�

8JUI FOPVHI QSBDUJDF ZPV XJMM NBTUFS UIJT NBUFSJBMρBOE IBWF GVO

BMPOH UIF XBZ�

)PX TLJMMFE EP * OFFE UP CF JO 1ZUIPO UP VTF UIJT CPPL 5IJT

��

Page 18: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

#POVT .BUFSJBM � -FBSOJOH 3FTPVSDFT

CPPL JT BJNFE BU *OUFSNFEJBUF UP "EWBODFE 1ZUIPO EFWFMPQFST� &WFSZ

FмPSU IBT CFFO UBLFO UP TIPX DPEF FYBNQMFT CVU TPNF JOUFSNFEJBUF

1ZUIPO UFDIOJRVFT XJMM CF VTFE UISPVHIPVU UIF CPPL�

%P * OFFE UP LOPX $ UP VTF UIJT CPPL :PV EP OPU OFFE UP CF

QSPнDJFOU JO$ UP VTF UIJT CPPL� *G ZPV BSF OFX UP$ DIFDL PVU"QQFOEJY

�� *OUSPEVDUJPO UP $ GPS 1ZUIPO 1SPHSBNNFST BU UIF CBDL PG UIJT CPPL

GPS B RVJDL JOUSPEVDUJPO�

)PX MPOH XJMM JU UBLF UP рOJTI UIJT CPPL * EPOυU SFDPNNFOE

SVTIJOH UIJT CPPL USZ SFBEJOH B DIBQUFS BU B UJNF USZJOH UIF FYBN�

QMFT BGUFS FBDI DIBQUFS BOE FYQMPSJOH UIF DPEF TJNVMUBOFPVTMZ� 0ODF

ZPVυWF нOJTIFE UIF CPPL JU XJMM NBLF B HSFBU SFGFSFODF HVJEF GPS ZPV

UP DPNF CBDL UP JO UJNF�

8POφU UIF DPOUFOU JO UIJT CPPL CF PVU PG EBUF SFBMMZ RVJDLMZ

1ZUIPO IBT CFFO BSPVOE GPS PWFS �� ZFBST� 4PNF QBSUT PG UIF $1ZUIPO

DPEF IBWFOυU CFFO UPVDIFE TJODF UIFZ XFSF PSJHJOBMMZ XSJUUFO� .BOZ PG

UIF QSJODJQMFT JO UIJT CPPL IBWF CFFO UIF TBNF GPS UFO PS NPSF ZFBST�

*O GBDU XIJMTU XSJUJOH UIJT CPPL * EJTDPWFSFE NBOZ MJOFT PG DPEF XSJU�

UFO CZ (VJEP WBO 3PTTVN UIF BVUIPS PG 1ZUIPO BOE VOUPVDIFE TJODF

WFSTJPO ��

5IF TLJMMT ZPVυMM MFBSO JO UIJT CPPL XJMM IFMQ ZPV SFBE BOE VOEFSTUBOE

DVSSFOU BOE GVUVSF WFSTJPOT PG $1ZUIPO� $IBOHF JT DPOTUBOU BOE ZPVS

FYQFSUJTF JT TPNFUIJOH ZPV DBO EFWFMPQ BMPOH UIF XBZ�

4PNFPG UIF DPODFQUT JO UIJT CPPL BSF CSBOE�OFX� TPNFBSF FWFO FYQFS�

JNFOUBM� 8IJMF XSJUJOH UIJT CPPL * DBNF BDSPTT JTTVFT JO UIF TPVSDF

DPEF BOE CVHT JO $1ZUIPO� 5IFO UIFZ HPU нYFE PS JNQSPWFE� 5IBUυT

QBSU PG UIF XPOEFS PG $1ZUIPO BT B GMPVSJTIJOH PQFO�TPVSDF QSPKFDU�

#POVT .BUFSJBM � -FBSOJOH 3FTPVSDFT

0OMJOF 3FTPVSDFT

5IJT CPPL DPNFT XJUI B OVNCFS PG GSFF CPOVT SFTPVSDFT UIBU ZPV DBO

BDDFTT BU SFBMQZUIPO�DPN�DQZUIPO�JOUFSOBMT�SFTPVSDFT�� 0O UIJT XFC

��

Page 19: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

#POVT .BUFSJBM � -FBSOJOH 3FTPVSDFT

QBHF ZPV DBO BMTP нOE BO FSSBUB MJTU XJUI DPSSFDUJPOT NBJOUBJOFE CZ

UIF 3FBM 1ZUIPO UFBN�

$PEF 4BNQMFT

5IF FYBNQMFT BOE TBNQMF DPOнHVSBUJPOT UISPVHIPVU UIJT CPPL XJMM

CF NBSLFE XJUI B IFBEFS EFOPUJOH UIFN BT QBSU PG UIF FS\WKRQ�ERRN�

VDPSOHV GPMEFS�

FS\WKRQ�ERRN�VDPSOHV �� H[DPSOH�S\

LPSRUW WKLV

:PV DBO EPXOMPBE UIF DPEF TBNQMFT BU SFBMQZUIPO�DPN�DQZUIPO�

JOUFSOBMT�SFTPVSDFT��

$PEF -JDFOTFT

5IF FYBNQMF 1ZUIPO TDSJQUT BTTPDJBUFE XJUI UIJT CPPL BSF MJDFOTFE VO�

EFS B $SFBUJWF $PNNPOT 1VCMJD %PNBJO $$� -JDFOTF� 5IJT NFBOT

UIBU ZPVυSF XFMDPNF UP VTF BOZ QPSUJPO PG UIF DPEF GPS BOZ QVSQPTF JO

ZPVS PXO QSPHSBNT�

$1ZUIPO JT MJDFOTFE VOEFS UIF 14' � MJDFOTF� 4OJQQFUT BOE TBNQMFT PG

$1ZUIPO TPVSDF DPEF VTFE JO UIJT CPPL BSF EPOF TP VOEFS UIF MJDFOTF

PG UIF 14' ��� MJDFOTF UFSNT�

/PUF

5IF DPEF GPVOE JO UIJT CPPL IBT CFFO UFTUFEXJUI 1ZUIPO �����C�

PO 8JOEPXT �� NBD04 ����� BOE -JOVY�

'PSNBUUJOH $POWFOUJPOT

$PEF CMPDLT XJMM CF VTFE UP QSFTFOU FYBNQMF DPEF�

� 7KLV LV 3\WKRQ FRGH�

SULQW��+HOOR ZRUOG���

��

Page 20: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

#POVT .BUFSJBM � -FBSOJOH 3FTPVSDFT

0QFSBUJOH 4ZTUFN BHOPTUJD DPNNBOET GPMMPX UIF 6OJY�TUZMF GPSNBU�

� � 7KLV LV D WHUPLQDO FRPPDQG�

� S\WKRQ KHOOR�ZRUOG�S\

5IF � JT OPU QBSU PG UIF DPNNBOE�

8JOEPXT�TQFDJнD DPNNBOET IBWF UIF 8JOEPXT DPNNBOE MJOF GPS�

NBU�

! S\WKRQ KHOOR�ZRUOG�S\

5IF ! JT OPU QBSU PG UIF DPNNBOE�

#PME UFYU XJMM CF VTFE UP EFOPUF B OFX PS JNQPSUBOU UFSN�

/PUFT BOE 8BSOJOH CPYFT BQQFBS BT GPMMPXT�

/PUF

5IJT JT B OPUF нMMFE JO XJUI QMBDFIPMEFS UFYU� 5IF RVJDL CSPXO

GPY KVNQT PWFS UIF MB[Z EPH� 5IF RVJDL CSPXO 1ZUIPO TMJUIFST

PWFS UIF MB[Z IPH�

*NQPSUBOU

5IJT JT B XBSOJOH BMTP нMMFE JO XJUI QMBDFIPMEFS UFYU� 5IF RVJDL

CSPXO GPY KVNQT PWFS UIF MB[Z EPH� 5IF RVJDL CSPXO 1ZUIPO

TMJUIFST PWFS UIF MB[Z IPH�

"OZ SFGFSFODFT UP B нMF XJUIJO UIF $1ZUIPO TPVSDF DPEF XJMM CF TIPXO

MJLF UIJT�

SDWK WR ILOH�S\

4IPSUDVUT PS NFOV DPNNBOET XJMM CF HJWFO JO TFRVFODF MJLF UIJT�

6BH2 Pi?2` PTiBQM

,FZCPBSE DPNNBOET BOE TIPSUDVUT XJMM CF HJWFO GPS CPUI NBD04 BOE

��

Page 21: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

#POVT .BUFSJBM � -FBSOJOH 3FTPVSDFT

8JOEPXT�

*h_G Y aS�*1

'FFECBDL � &SSBUB

8F XFMDPNF JEFBT TVHHFTUJPOT GFFECBDL BOE UIF PDDBTJPOBM SBOU�

%JE ZPV нOE B UPQJD DPOGVTJOH %JE ZPV нOE BO FSSPS JO UIF UFYU PS

DPEF %JE XF MFBWF PVU B UPQJD ZPV XPVME MPWF UP LOPX NPSF BCPVU

8FυSF BMXBZT MPPLJOH UP JNQSPWF PVS UFBDIJOH NBUFSJBMT� 8IBUFWFS

UIF SFBTPO QMFBTF TFOE JO ZPVS GFFECBDL BU UIF MJOL CFMPX�

SFBMQZUIPO�DPN�DQZUIPO�JOUFSOBMT�GFFECBDL

"CPVU 3FBM 1ZUIPO

"U 3FBM 1ZUIPO ZPVυMM MFBSO SFBM�XPSME QSPHSBNNJOH TLJMMT GSPN B

DPNNVOJUZ PG QSPGFTTJPOBM 1ZUIPOJTUBT GSPN BMM BSPVOE UIF XPSME�

5IF SFBMQZUIPO�DPN XFCTJUF MBVODIFE JO ���� BOE DVSSFOUMZ IFMQT

NPSF UIBO UXP NJMMJPO 1ZUIPO EFWFMPQFST FBDI NPOUI XJUI CPPLT

QSPHSBNNJOH UVUPSJBMT BOE PUIFS JO�EFQUI MFBSOJOH SFTPVSDFT�

)FSFυT XIFSF ZPV DBO нOE 3FBM 1ZUIPO PO UIF XFC�

ύ SFBMQZUIPO�DPN

ύ !SFBMQZUIPO PO 5XJUUFS

ύ 5IF 3FBM 1ZUIPO &NBJM /FXTMFUUFS

��

Page 22: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

(FUUJOH UIF $1ZUIPO 4PVSDF

$PEF

8IFO ZPV UZQF S\WKRQ BU UIF DPOTPMF PS JOTUBMM B 1ZUIPO EJTUSJCVUJPO

GSPN QZUIPO�PSH ZPV BSF SVOOJOH $1ZUIPO� $1ZUIPO JT POF PG

NBOZ 1ZUIPO JNQMFNFOUBUJPOT NBJOUBJOFE BOE XSJUUFO CZ EJмFSFOU

UFBNT PG EFWFMPQFST� 4PNF BMUFSOBUJWFT ZPV NBZ IBWF IFBSE BSF 1Z1Z

$ZUIPO BOE +ZUIPO�

5IF VOJRVF UIJOH BCPVU $1ZUIPO JT UIBU JU DPOUBJOT CPUI B SVOUJNF

BOE UIF TIBSFE MBOHVBHF TQFDJнDBUJPO UIBU BMM PUIFS 1ZUIPO JNQMFNFO�

UBUJPOT VTF� $1ZUIPO JT UIF ψPпDJBMω PS SFGFSFODF JNQMFNFOUBUJPO PG

1ZUIPO�

5IF 1ZUIPO MBOHVBHF TQFDJнDBUJPO JT UIF EPDVNFOU UIBU EFTDSJCFT UIF

1ZUIPO MBOHVBHF� 'PS FYBNQMF JU TBZT UIBU DVVHUW JT B SFTFSWFE LFZ�

XPSE BOE UIBU >@ JT VTFE GPS JOEFYJOH TMJDJOH BOE DSFBUJOH FNQUZ MJTUT�

5IJOL BCPVU XIBU ZPV FYQFDU UP CF JOTJEF UIF 1ZUIPO EJTUSJCVUJPO�

ύ 8IFO ZPV UZQF S\WKRQ XJUIPVU B нMF PS NPEVMF JU HJWFT BO JOUFSBD�

UJWF QSPNQU 3&1-�

ύ :PV DBO JNQPSU CVJMU�JO NPEVMFT GSPN UIF TUBOEBSE MJCSBSZ MJLF

MVRQ FVY BOE FROOHFWLRQV�

ύ :PV DBO JOTUBMM QBDLBHFT GSPN UIF JOUFSOFU VTJOH SLS�

ύ :PV DBO UFTU ZPVS BQQMJDBUJPOT VTJOH UIF CVJMU�JO XQLWWHVW MJCSBSZ�

5IFTF BSF BMM QBSU PG UIF $1ZUIPO EJTUSJCVUJPO� 5IFSFυT B MPU NPSF UIBO

��

Page 23: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

KVTU B DPNQJMFS�

*O UIJT CPPL XFυMM FYQMPSF UIF EJмFSFOU QBSUT PG UIF $1ZUIPO EJTUSJCV�

UJPO�

ύ 5IF MBOHVBHF TQFDJнDBUJPO

ύ 5IF DPNQJMFS

ύ 5IF TUBOEBSE MJCSBSZ NPEVMFT

ύ 5IF DPSF UZQFT

ύ 5IF UFTU TVJUF

8IBUφT JO UIF 4PVSDF $PEF

/PUF

5IJT CPPL UBSHFUT WFSTJPO �����C� PG UIF $1ZUIPO TPVSDF DPEF�

5IF $1ZUIPO TPVSDF EJTUSJCVUJPO DPNFT XJUI B XIPMF SBOHF PG UPPMT

MJCSBSJFT BOE DPNQPOFOUT� 8FυMM FYQMPSF UIPTF JO UIJT CPPL�

5P EPXOMPBE B DPQZ PG UIF $1ZUIPO TPVSDF DPEF ZPV DBO VTF JLW UP

QVMM UIF MBUFTU WFSTJPO�

� JLW FORQH KWWSV���JLWKXE�FRP�S\WKRQ�FS\WKRQ

� FG FS\WKRQ

8F BSF VTJOH WFSTJPO �����C� UISPVHIPVU UIJT CPPL� $IFDL PVU UIBU

WFSTJPO BOE DSFBUF B MPDBM CSBODI GSPN JU�

� JLW FKHFNRXW WDJV�Y�����E� �E Y�����E�

��

Page 24: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

/PUF

*G ZPV EPOυU IBWF (JU BWBJMBCMF ZPV DBO JOTUBMM JU GSPN HJU�

TDN�DPN� "MUFSOBUJWFMZ ZPV DBO EPXOMPBE UIF $1ZUIPO TPVSDF

JO B ;*1 нMF EJSFDUMZ GSPN UIF (JU)VC XFCTJUF�

*G ZPV EPXOMPBE UIF TPVSDF BT B ;*1 нMF JU XPOυU DPOUBJO BOZ

IJTUPSZ UBHT PS CSBODIFT�

*OTJEF PG UIF OFXMZ EPXOMPBEFE FS\WKRQ EJSFDUPSZ ZPV XJMM нOE UIF

GPMMPXJOH TVCEJSFDUPSJFT�

cpython/

DocGrammarIncludeLibMacMiscModulesObjectsParserPCPCBuildProgramsPythonTools

Source for the documentationThe computer-readable language definitionThe C header filesStandard library modules written in PythonmacOS support filesMiscellaneous filesStandard library modules written in CCore types and the object modelThe Python parser source codeWindows build suppport files for older versions of WindowsWindows build support filesSource code for the ‘python’ executable and other binariesThe CPython interpreter source codeStandalone tools useful for building or extending CPython

m4 Custom scripts to automate configuration of the makefile

/FYU ZPV DBO TFU VQ ZPVS FOWJSPONFOU SFBEZ GPS EFWFMPQNFOU�

��

Page 25: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ :PVS

%FWFMPQNFOU &OWJSPONFOU

5ISPVHIPVU UIJT CPPL ZPVυMM CF XPSLJOH XJUI $ BOE 1ZUIPO DPEF� *UυT

HPJOH UP CF FTTFOUJBM UP IBWF ZPVS EFWFMPQNFOU FOWJSPONFOU DPOнH�

VSFE UP TVQQPSU CPUI MBOHVBHFT�

5IF $1ZUIPO TPVSDF DPEF JT BCPVU ��� 1ZUIPO UIF UFTUT BSF B TJHOJн�

DBOU QBSU ��� $ BOE UIF SFNBJOEFS B NJY PG PUIFS MBOHVBHFT�

*%& PS &EJUPS

*G ZPV IBWFOυU ZFU EFDJEFE XIJDI EFWFMPQNFOU FOWJSPONFOU UP VTF

UIFSF JT POF EFDJTJPO UP NBLF нSTU XIFUIFS UP VTF BO *OUFHSBUFE %F�

WFMPQNFOU &OWJSPONFOU *%& PS DPEF FEJUPS�

ύ "O *%& UBSHFUT B TQFDJнD MBOHVBHF BOE UPPMDIBJO� .PTU *%&T IBWF

JOUFHSBUFE UFTUJOH TZOUBY DIFDLJOH WFSTJPO DPOUSPM BOE DPNQJMB�

UJPO�

ύ " DPEF FEJUPS FOBCMFT ZPV UP FEJU DPEF нMFT SFHBSEMFTT PG MBO�

HVBHF� .PTU DPEF FEJUPST BSF TJNQMF UFYU FEJUPST XJUI TZOUBY IJHI�

MJHIUJOH�

#FDBVTF PG UIFJS GVMM�GFBUVSFE OBUVSF *%&T PGUFO DPOTVNFNPSF IBSE�

XBSF SFTPVSDFT� 4P JG ZPV IBWF MJNJUFE 3". MFTT UIBO �(# B DPEF

FEJUPS JT SFDPNNFOEFE� *%&T BMTP UBLF MPOHFS UP TUBSU�VQ� *G ZPV XBOU

UP FEJU B нMF RVJDLMZ B DPEF FEJUPS JT B CFUUFS DIPJDF�

��

Page 26: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

*%& PS &EJUPS

5IFSF BSF ���υT PG FEJUPST BOE *%&T BWBJMBCMF GPS GSFF PS BU B DPTU IFSF

BSF TPNF DPNNPOMZ VTFE *%&T BOE &EJUPST UIBU XPVME TVJU $1ZUIPO

EFWFMPQNFOU�

"QQMJDBUJPO 4UZMF 4VQQPSUT

.JDSPTPGU 74 $PEF &EJUPS 8JOEPXT

NBD04 BOE

-JOVY

"UPN &EJUPS 8JOEPXT

NBD04 BOE

-JOVY

4VCMJNF 5FYU &EJUPS 8JOEPXT

NBD04 BOE

-JOVY

7JN &EJUPS 8JOEPXT

NBD04 BOE

-JOVY

&NBDT &EJUPS 8JOEPXT

NBD04 BOE

-JOVY

.JDSPTPGU 7JTVBM 4UVEJP *%& $ 1ZUIPO

BOE PUIFST

8JOEPXT�

1Z$IBSN CZ +FU#SBJOT *%& 1ZUIPO BOE

PUIFST

8JOEPXT

NBD04 BOE

-JOVY

$-JPO CZ +FU#SBJOT *%& $ BOE

PUIFST

8JOEPXT

NBD04 BOE

-JOVY

" WFSTJPO PG 7JTVBM 4UVEJP JT BWBJMBCMF GPS .BD CVU EPFT OPU TVQQPSU

1ZUIPO 5PPMT GPS 7JTVBM 4UVEJP OPS $ DPNQJMBUJPO�

5P BJE UIF EFWFMPQNFOU PG $1ZUIPO ZPV XJMM FYQMPSF UIF TFUVQ TUFQT

GPS�

ύ .JDSPTPGU 7JTVBM 4UVEJP

ύ .JDSPTPGU 7JTVBM 4UVEJP $PEF

ύ +FU#SBJOT $-JPO

ύ 7JN

��

Page 27: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP

4LJQ BIFBE UP UIF TFDUJPO GPS ZPVS DIPTFO BQQMJDBUJPO PS SFBE BMM PG

UIFN JG ZPV XBOU UP DPNQBSF�

4FUUJOH VQ 7JTVBM 4UVEJP

5IF OFXFTU WFSTJPO PG 7JTVBM 4UVEJP 7JTVBM 4UVEJP ���� IBT CVJMUJO

TVQQPSU GPS 1ZUIPO BOE UIF $ TPVSDF DPEF PO8JOEPXT� * SFDPNNFOE

JU GPS UIJT CPPL� *G ZPV BMSFBEZ IBWF 7JTVBM 4UVEJP ���� JOTUBMMFE UIBU

XPVME BMTP XPSL�

/PUF

/POF PG UIF QBJE GFBUVSFT BSF SFRVJSFE GPS DPNQJMJOH $1ZUIPO

PS UIJT CPPL� :PV DBO VTF UIF GSFF $PNNVOJUZ FEJUJPO PG 7JTVBM

4UVEJP�

5IF 1SPнMF�(VJEFE�0QUJNJ[BUJPO CVJME QSPнMF SFRVJSFT UIF 1SP�

GFTTJPOBM &EJUJPO PS IJHIFS�

7JTVBM 4UVEJP JT BWBJMBCMF GPS GSFF GSPN.JDSPTPGUυT 7JTVBM 4UVEJP XFC�

TJUF�

0ODF ZPVυWF EPXOMPBEFE UIF 7JTVBM 4UVEJP JOTUBMMFS ZPVυMM CF BTLFE UP

TFMFDU XIJDI DPNQPOFOUT ZPV XBOU UP JOTUBMM� 5IF CBSF NJOJNVN GPS

UIJT CPPL JT�

ύ 5IF 1ZUIPO %FWFMPQNFOU XPSLMPBE

ύ 5IF PQUJPOBM 1ZUIPO OBUJWF EFWFMPQNFOU UPPMT

ύ 1ZUIPO � ���CJU ����� DBO CF EFTFMFDUFE JG ZPV BMSFBEZ IBWF

1ZUIPO ��� JOTUBMMFE

%FTFMFDU BOZ PUIFS PQUJPOBM GFBUVSFT JG ZPV XBOU UP CF NPSF DPOTDJFO�

UJPVT XJUI EJTL TQBDF�

5IF JOTUBMMFS XJMM UIFO EPXOMPBE BOE JOTUBMM BMM PG UIF SFRVJSFE DPNQP�

OFOUT� 5IF JOTUBMMBUJPO DPVME UBLF BO IPVS TP ZPV NBZ XBOU UP SFBE

PO BOE DPNF CBDL UP UIJT TFDUJPO�

��

Page 28: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP

0ODF UIF JOTUBMMFS IBT DPNQMFUFE DMJDL UIF G�mM+? CVUUPO UP TUBSU 7J�

TVBM 4UVEJP� :PV XJMM CF QSPNQUFE UP TJHO JO� *G ZPV IBWF B .JDSPTPGU

BDDPVOU ZPV DBO MPH JO PS TLJQ UIBU TUFQ�

:PV XJMM OPX CF QSPNQUFE UP 0QFO B 1SPKFDU� :PV DBO DMPOF

$1ZUIPOυT (JU SFQPTJUPSZ EJSFDUMZ GSPN 7JTVBM 4UVEJP CZ DIPPTJOH UIF

*HQM2 Q` +?2+F Qmi +Q/2 PQUJPO�

'PS UIF 3FQPTJUPSZ -PDBUJPO FOUFS KWWSV���JLWKXE�FRP�S\WKRQ�FS\WKRQ

DIPTF ZPVS -PDBM QBUI BOE TFMFDU *HQM2 �

7JTVBM 4UVEJP XJMM UIFO EPXOMPBE B DPQZ PG $1ZUIPO GSPN (JU)VC VT�

JOH UIF WFSTJPO PG (JU CVOEMFE XJUI 7JTVBM 4UVEJP� 5IJT TUFQ BMTP TBWFT

ZPV UIF IBTTMF PG IBWJOH UP JOTUBMM (JU PO8JOEPXT� 5IF EPXOMPBENBZ

UBLF �� NJOVUFT�

0ODF UIF QSPKFDU IBT EPXOMPBEFE ZPV OFFE UP QPJOU 7JTVBM

4UVEJP UP UIF 3&%XLOG SFEXLOG�VOQ 4PMVUJPO нMF CZ DMJDLJOH PO

aQHmiBQMb �M/ S`QD2+ib T+#mBH/XbHM �

/PX UIBU ZPV IBWF 7JTVBM 4UVEJP DPOнHVSFE BOE UIF TPVSDF DPEF

��

Page 29: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP $PEF

EPXOMPBEFE ZPV DBO DPNQJMF $1ZUIPO PO 8JOEPXT CZ GPMMPXJOH UIF

TUFQT JO UIF OFYU DIBQUFS�

4FUUJOH VQ 7JTVBM 4UVEJP $PEF

.JDSPTPGU 7JTVBM 4UVEJP $PEF JT BO FYUFOTJCMF DPEF�FEJUPS XJUI BO PO�

MJOF NBSLFUQMBDF PG QMVHJOT�

*U NBLFT BO FYDFMMFOU DIPJDF GPS XPSLJOH XJUI $1ZUIPO BT JU TVQQPSUT

CPUI $ BOE 1ZUIPO XJUI BO JOUFHSBUFE (JU JOUFSGBDF�

*OTUBMMJOH

7JTVBM 4UVEJP $PEF PS TPNFUJNFT LOPXO BT ψ74 $PEF ω JT BWBJMBCMF

XJUI B TJNQMF JOTUBMMFS BU DPEF�WJTVBMTUVEJP�DPN�

0VU�PG�UIF�CPY 74 $PEF XJMM IBWF SFRVJSFE DPEF FEJUJOH DBQBCJMJUJFT

CVU CFDPNFT NPSF QPXFSGVM PODF ZPV IBWF JOTUBMMFE FYUFOTJPOT�

5IF &YUFOTJPOT QBOFM JT BWBJMBCMF CZ TFMFDUJOH oB2r 1ti2MbBQMb GSPN

UIF UPQ NFOV�

��

Page 30: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP $PEF

*OTJEF UIF FYUFOTJPOT QBOFM ZPV DBO TFBSDI GPS FYUFOTJPOT CZ OBNF

PS CZ UIFJS VOJRVF JEFOUJнFS F�H� τPV�YVFRGH�FSSWRROV�υ *O TPNF DBTFT

UIFSF BSF NBOZ QMVHJOT XJUI TJNJMBS OBNFT TP UP CF TVSF ZPVυSF JO�

TUBMMJOH UIF SJHIU POF VTF UIF VOJRVF JEFOUJнFS�

3FDPNNFOEFE &YUFOTJPOT GPS 5IJT #PPL

ύ $�$�� PV�YVFRGH�FSSWRROV 1SPWJEFT TVQQPSU GPS $�$�� JODMVEJOH

*OUFMMJ4FOTF EFCVHHJOH BOE DPEF IJHIMJHIUJOH�

ύ 1ZUIPO PV�S\WKRQ�S\WKRQ 1SPWJEFT SJDI 1ZUIPO TVQQPSU GPS FEJUJOH

EFCVHHJOH BOE SFBEJOH 1ZUIPO DPEF�

ύ 3FTUSVDUVSFE 5FYU OH[WXGLR�UHVWUXFWXUHGWH[W 1SPWJEFT SJDI

TVQQPSU GPS SF4USVDUVSFE5FYU UIF GPSNBU VTFE JO UIF $1ZUIPO

EPDVNFOUBUJPO�

ύ 5BTL &YQMPSFS VSPHHVVHPDQ�YVFRGH�WDVNH[SORUHU "EET B ψ5BTL &Y�

QMPSFSω QBOFM JOTJEF UIF &YQMPSFS UBC NBLJOH JU FBTJFS UP MBVODI

NBLF UBTLT�

��

Page 31: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP $PEF

0ODF ZPV IBWF JOTUBMMFE UIFTF FYUFOTJPOT ZPV XJMM OFFE UP SFMPBE UIF

FEJUPS�

#FDBVTF NBOZ PG UIF UBTLT JO UIJT CPPL SFRVJSF B DPNNBOE�MJOF ZPV

DBO BEE BO JOUFHSBUFE 5FSNJOBM JOUP 74 $PEF CZ TFMFDUJOH h2`KBM�HL2r h2`KBM�H BOE B UFSNJOBM XJMM BQQFBS CFMPX UIF DPEF FEJUPS�

6TJOH UIF "EWBODFE $PEF /BWJHBUJPO

*OUFMMJ4FOTF

8JUI UIF QMVHJOT JOTUBMMFE ZPV DBO QFSGPSN TPNF BEWBODFE DPEF OBW�

JHBUJPO�

'PS FYBNQMF JG ZPV SJHIU�DMJDL PO B GVODUJPO DBMM JO B $ нMF BOE TFMFDU

:Q iQ _272`2M+2b JU XJMM нOE PUIFS SFGFSFODFT JO UIF DPEFCBTF UP UIBU

GVODUJPO�

��

Page 32: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP $PEF

:Q iQ _272`2M+2b JT WFSZ VTFGVM GPS EJTDPWFSJOH UIF QSPQFS DBMMJOH GPSN

GPS B GVODUJPO�

#Z DMJDLJOH PS IPWFSJOH PWFS B $ .BDSP UIF FEJUPS XJMM FYQBOE UIBU

.BDSP UP UIF DPNQJMFE DPEF�

5P KVNQ UP UIF EFнOJUJPO PG B GVODUJPO IPWFS PWFS BOZ DBMM UP JU BOE

QSFTT +K/ Y +HB+F PO NBD04 BOE +i`H Y +HB+F PO -JOVY BOE 8JOEPXT�

$POрHVSJOH UIF 5BTL BOE -BVODI 'JMFT

74 $PEF DSFBUFT B GPMEFS �YVFRGH JO UIF 8PSLTQBDF %JSFDUPSZ� *OTJEF

UIJT GPMEFS ZPV DBO DSFBUF�

ύ WDVNV�MVRQ GPS TIPSUDVUT UP DPNNBOET UIBU FYFDVUF ZPVS QSPKFDU

ύ ODXQFK�MVRQ UP DPOнHVSF UIF EFCVHHFS TFF UIF DIBQUFS PO %FCVH�

HJOH

ύ PUIFS QMVHJO�TQFDJнD нMFT

$SFBUF B WDVNV�MVRQ нMF JOTJEF UIF �YVFRGH EJSFDUPSZ� *G JU EPFTOυU FYJTU

DSFBUF JU OPX� 5IJT WDVNV�MVRQ XJMM HFU ZPV TUBSUFE�

FS\WKRQ�ERRN�VDPSOHV �� WDVNV�MVRQ

��

Page 33: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JTVBM 4UVEJP $PEF

^

�YHUVLRQ�� ��������

�WDVNV�� >

^

�ODEHO�� �EXLOG��

�W\SH�� �VKHOO��

�JURXS�� ^

�NLQG�� �EXLOG��

�LV'HIDXOW�� WUXH

`�

�ZLQGRZV��^

�FRPPDQG�� �3&%XLOG?EXLOG�EDW��

�DUJV�� >��S [�� �F 'HEXJ�@

`�

�OLQX[��^

�FRPPDQG�� �PDNH �M� �V�

`�

�RV[��^

�FRPPDQG�� �PDNH �M� �V�

`

`

@

`

8JUI UIF 7DVN ([SORUHU QMVHJO ZPV XJMM TFF B MJTU PG ZPVS DPOнHVSFE

UBTLT JOTJEF UIF WTDPEF HSPVQ�

*O UIF OFYU DIBQUFS ZPV XJMM MFBSO NPSF BCPVU UIF CVJME QSPDFTT GPS

��

Page 34: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ +FU#SBJOT $-JPO

DPNQJMJOH $1ZUIPO�

4FUUJOH VQ +FU#SBJOT $-JPO

+FU#SBJOT NBLF BO *%& GPS 1ZUIPO DBMMFE 1Z$IBSN BT XFMM BT BO *%&

GPS $�$�� EFWFMPQNFOU DBMMFE $-JPO�

$1ZUIPO IBT CPUI $ BOE 1ZUIPO DPEF� :PV DBOOPU JOTUBMM $�$�� TVQ�

QPSU JOUP 1Z$IBSN CVU $-JPO DPNFT CVOEMFE XJUI 1ZUIPO TVQQPSU�

5P TFUVQ $1ZUIPO JO $-JPO JOTUBMM UIF GPMMPXJOH QMVHJOT�

ύ .BLFнMF TVQQPSU

$-JPO JT GVMMZ JOUFHSBUFE XJUI UIF $.BLF TZTUFN� )PXFWFS $1ZUIPO

VTFT (/6 .BLF� $-JPO XJMM HJWF BO FSSPS TBZJOH JU DBOOPU MPDBUF B

&0DNH/LVWV�W[W нMF XIFO ZPV PQFO UIF $1ZUIPO TPVSDF DPEF EJSFDUPSZ�

5IFSF JT B XPSLBSPVOE UP DSFBUF B FRPSLOHBFRPPDQGV�MVRQ нMF GSPN UIF

DPNQJMBUJPO TUFQT JOTJEF UIF $1ZUIPO .BLFнMF�

*NQPSUBOU

5IJT TUFQ BTTVNFT ZPV DBO DPNQJMF $1ZUIPO QMFBTF SFBE $PN�

QJMJOH $1ZUIPO GPS ZPVS 0QFSBUJOH 4ZTUFN BOE SFUVSO UP UIJT

DIBQUFS�

8FOFFE UP DSFBUF B ψ$PNQJMF%BUBCBTFω VTJOH B VUJMJUZ DBMMFE FRPSLOHGE�

"U UIF DPNNBOE MJOF XJUIJO UIF $1ZUIPO SFQPTJUPSZ�

� SLS LQVWDOO FRPSLOHGE

� FRPSLOHGE PDNH

5IFO PQFO $-JPO BOE PQFO UIF FRPSLOHBFRPPDQGV�MVRQ нMF ZPV XJMM CF

BTLFE UP PQFO нMF PS ψ0QFO BT 1SPKFDU ω TFMFDU PT2M �b S`QD2+i �

��

Page 35: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ +FU#SBJOT $-JPO

$-JPO XJMM UIFO PQFO VQ UIF $1ZUIPO TPVSDF EJSFDUPSZ BT B 1SPKFDU�

��

Page 36: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ +FU#SBJOT $-JPO

/PUF

'PS WFSTJPOT PG $-JPO CFGPSF ������ ZPV OFFE UP MJOL UIF

DPNQJMF DPNNBOET BOE UIF QSPKFDU UPHFUIFS� (P UP $-JPO

4FUUJOHT

"mBH/- 1t2+miBQM- .2THQvK2Mi *QKTBH�iBQM .�i�#�b2 BOE DIFDL

UIF ψ6TF BVUP�JNQPSUω CPY�

8IFO ZPV PQFO UIJT QSPKFDU JO UIF GVUVSF JU XJMM IBWF JOUFMMJHFOU

DPEF OBWJHBUJPO CBTFE PO UIF DPNQJMFE WFSTJPO PG $1ZUIPO�

8JUIJO UIF DPEF FEJUPS UIF TIPSUDVU +K/ Y +HB+F PO NBD04 BOE +i`H Y

+HB+F PO 8JOEPXT BOE -JOVY XJMM HJWF JO�FEJUPS OBWJHBUJPO GFBUVSFT�

��

Page 37: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ +FU#SBJOT $-JPO

:PV DBO VTF UIF .BLFнMF QMVHJO UP DSFBUF TIPSUDVUT GPS DPNQJMJOH

$1ZUIPO� 4FMFDU _mM 1/Bi *QM};m`�iBQMbXXX UP PQFO UIF ψ3VO�%FCVH

$POнHVSBUJPOTω XJOEPX� *OTJEF UIJT XJOEPX TFMFDU Y J�F2}H2 UP

BEE B .BLFнMF DPOнHVSBUJPO� 4FU 0DNH DOO BT UIF OBNF DOO BT UIF

UBSHFU BOE �V M� BT UIF BSHVNFOUT� &OTVSF UIF 8PSLJOH %JSFDUPSZ JT

TFU UP UIF EJSFDUPSZ XIFSF ZPV IBWF EPXOMPBEFE UIF TPVSDF DPEF�

$MJDL"QQMZ UP BEE UIJT DPOнHVSBUJPO� :PV DBO SFQFBU UIJT TUFQ BTNBOZ

UJNFT BT ZPV MJLF GPS BOZ PG UIF $1ZUIPO NBLF UBSHFUT� 4FF $1ZUIPOυT

.BLF 5BSHFUT GPS B GVMM SFGFSFODF�

��

Page 38: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JN

5IF 0DNH DOO CVJME DPOнHVSBUJPO XJMM OPX CF BWBJMBCMF JO UIF UPQ�SJHIU

PG UIF $-JPO XJOEPX�

/PX UIBU $-JPO JT TFU VQ GPMMPX UIF TUFQT GPS DPNQJMJOH $1ZUIPO�

4FUUJOH VQ 7JN

7JN JT B QPXFSGVM DPOTPMF�CBTFE UFYU FEJUPS� 6TF 7JNXJUI ZPVS IBOET

SFTUJOH PO UIF LFZCPBSE IPNF LFZT� 5IF TIPSUDVUT BOE DPNNBOET BSF

XJUIJO SFBDI GPS GBTU EFWFMPQNFOU�

/PUF

0O NPTU -JOVY EJTUSJCVUJPOT BOE XJUIJO UIF NBD04 5FSNJOBM

YL JT BO BMJBT GPS YLP� *υMM VTF UIF YLP DPNNBOE CVU JG ZPV IBWF

UIF BMJBT YL XJMM BMTP XPSL�

0VU PG UIF CPY 7JN IBT POMZ CBTJD GVODUJPOBMJUZ MJUUMFNPSF UIBO B UFYU

FEJUPS MJLF /PUFQBE� 8JUI TPNF DPOнHVSBUJPO BOE FYUFOTJPOT 7JN

DBO CFDPNF QPXFSGVM GPS CPUI 1ZUIPO BOE $ FEJUJOH� 7JNυT FYUFOTJPOT

BSF JO WBSJPVT MPDBUJPOT MJLF (JU)VC� 5P FBTF UIF DPOнHVSBUJPO BOE

JOTUBMMBUJPO PG QMVHJOT GSPN (JU)VC ZPV DBO JOTUBMM B QMVHJO NBOBHFS

MJLF 7VOEMF�

5P JOTUBMM 7VOEMF SVO UIJT DPNNBOE BU UIF UFSNJOBM�

��

Page 39: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JN

� JLW FORQH KWWSV���JLWKXE�FRP�9XQGOH9LP�9XQGOH�YLP�JLW ?

a��YLP�EXQGOH�9XQGOH�YLP

0ODF 7VOEMF JT EPXOMPBEFE ZPV OFFE UP DPOнHVSF 7JN UP MPBE UIF

7VOEMF FOHJOF�

8F XJMM JOTUBMM UXP QMVHJOT�

ύ WJN�GVHJUJWF " TUBUVT CBS GPS (JU XJUI TIPSUDVUT GPS NBOZ (JU UBTLT�

ύ UBHCBS " QBOF GPS NBLJOH JU FBTJFS UP KVNQ UP GVODUJPOT NFUIPET

BOE DMBTTFT�

5P JOTUBMM UIFTF QMVHJOT нSTU DIBOHF UIF DPOUFOUT PG ZPVS WJN DPOнHV�

SBUJPO нMF OPSNBMMZ +20( �YLPUF UP JODMVEF UIF GPMMPXJOH MJOFT�

FS\WKRQ�ERRN�VDPSOHV �� �YLPUF

V\QWD[ RQ

VHW QRFRPSDWLEOH � EH L0SURYHG� UHTXLUHG

ILOHW\SH RII � UHTXLUHG

� VHW WKH UXQWLPH SDWK WR LQFOXGH 9XQGOH DQG LQLWLDOL]H

VHW UWS� a��YLP�EXQGOH�9XQGOH�YLP

FDOO YXQGOH�EHJLQ��

� OHW 9XQGOH PDQDJH 9XQGOH� UHTXLUHG

3OXJLQ 9XQGOH9LP�9XQGOH�YLP

� 7KH IROORZLQJ DUH H[DPSOHV RI GLIIHUHQW IRUPDWV VXSSRUWHG�

� .HHS 3OXJLQ FRPPDQGV EHWZHHQ YXQGOH�EHJLQ�HQG�

� SOXJLQ RQ *LW+XE UHSR

3OXJLQ WSRSH�YLP�IXJLWLYH

3OXJLQ PDMXWVXVKL�WDJEDU

� $OO RI \RXU 3OXJLQV PXVW EH DGGHG EHIRUH WKLV OLQH

FDOO YXQGOH�HQG�� � UHTXLUHG

ILOHW\SH SOXJLQ LQGHQW RQ � UHTXLUHG

� 2SHQ WDJEDU DXWRPDWLFDOO\ LQ & ILOHV� RSWLRQDO

��

Page 40: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JN

DXWRFPG )LOH7\SH F FDOO WDJEDU�DXWRRSHQ���

� 2SHQ WDJEDU DXWRPDWLFDOO\ LQ 3\WKRQ ILOHV� RSWLRQDO

DXWRFPG )LOH7\SH S\WKRQ FDOO WDJEDU�DXWRRSHQ���

� 6KRZ VWDWXV EDU� RSWLRQDO

VHW ODVWVWDWXV �

� 6HW VWDWXV DV JLW VWDWXV �EUDQFK�� RSWLRQDO

VHW VWDWXVOLQH �^)XJLWLYH6WDWXVOLQH��`

5P EPXOMPBE BOE JOTUBMM UIFTF QMVHJOT SVO�

� YLP �3OXJLQ,QVWDOO �TDOO

:PV TIPVME TFF PVUQVU GPS UIF EPXOMPBE BOE JOTUBMMBUJPO PG UIF QMVHJOT

TQFDJнFE JO UIF DPOнHVSBUJPO нMF�

8IFO FEJUJOH PS FYQMPSJOH UIF $1ZUIPO TPVSDF DPEF ZPV XJMM XBOU UP

KVNQ CFUXFFO NFUIPET GVODUJPOT BOE NBDSPT RVJDLMZ� 0OMZ VTJOH

UFYU TFBSDI XPOυU EFUFSNJOF B DBMM UP B GVODUJPO PS JUT EFнOJUJPO WFS�

TVT UIF JNQMFNFOUBUJPO� "O BQQMJDBUJPO DBMMFE DUBHT XJMM JOEFY TPVSDF

нMFT BDSPTT B NVMUJUVEF PG MBOHVBHFT JOUP B QMBJOUFYU EBUBCBTF�

5P JOEFY $1ZUIPOυT IFBEFST GPS BMM UIF $ нMFT BOE 1ZUIPO нMFT JO UIF

TUBOEBSE MJCSBSZ SVO�

� PDNH WDJV

8IFO ZPV PQFO YLP OPX GPS FYBNQMF FEJUJOH UIF 3\WKRQ FHYDO�F нMF�

� YLP 3\WKRQ�FHYDO�F

:PV XJMM TFF UIF (JU TUBUVT BU UIF CPUUPN BOE UIF GVODUJPOT NBDSPT

BOE WBSJBCMFT PO UIF SJHIU�IBOE QBOF�

��

Page 41: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

4FUUJOH VQ 7JN

8IFO FEJUJOH 1ZUIPO нMFT TVDI BT UIF /LE VXESURFHVV�S\�

� YLP /LE�VXESURFHVV�S\

5IF UBHCBS XJMM TIPX JNQPSUT DMBTTFT NFUIPET BOE GVODUJPOT�

��

Page 42: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PODMVTJPO

8JUIJO YLP ZPV DBO TXJUDI CFUXFFO UBCT BT *h_G Y q G UP NPWF

UP UIF SJHIU�IBOE QBOF VTJOH UIF BSSPX LFZT UP NPWF VQ BOE EPXO

CFUXFFO UIF UBHHFE GVODUJPOT� 1SFTT FOUFS UP TLJQ UP BOZ GVODUJPO JN�

QMFNFOUBUJPO� 5PNPWF CBDL UP UIF FEJUPS QBOF QSFTT *h_G Y q >

4FF "MTP

$IFDL PVU WJN BEWFOUVSFT GPS B GVO XBZ UP MFBSO BOE NFNPSJ[F

UIF WJN DPNNBOET�

$PODMVTJPO

*G ZPVυSF TUJMM VOEFDJEFE BCPVU XIJDI FOWJSPONFOU UP VTF ZPV EPOυU

OFFE UP NBLF B EFDJTJPO SJHIU IFSF BOE OPX� * VTFE NVMUJQMF FOWJSPO�

NFOUT XIJMF XSJUJOH UIJT CPPL BOE XPSLJOH PO DIBOHFT UP $1ZUIPO� "

DSJUJDBM GFBUVSF GPS QSPEVDUJWJUZ JT EFCVHHJOH TP IBWJOH B SFMJBCMF EF�

CVHHFS UIBU ZPV DBO VTF UP FYQMPSF UIF SVOUJNF BOE VOEFSTUBOE CVHT

XJMM TBWF B MPU PG UJNF� &TQFDJBMMZ JG ZPVυSF VTFE UP SFMZJOH PO SULQW��

��

Page 43: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PODMVTJPO

GVODUJPOT GPS EFCVHHJOH JO 1ZUIPO UIBU BQQSPBDI EPFTOυU XPSL JO $�

:PV XJMM DPWFS %FCVHHJOH JO GVMM MBUFS JO UIJT CPPL�

��

Page 44: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO

/PX UIBU ZPV IBWF $1ZUIPO EPXOMPBEFE B EFWFMPQNFOU FOWJSPONFOU

BOE DPOнHVSFE JU ZPV DBO DPNQJMF UIF $1ZUIPO TPVSDF DPEF JOUP BO

FYFDVUBCMF JOUFSQSFUFS�

6OMJLF 1ZUIPO нMFT $ TPVSDF DPEF NVTU CF SFDPNQJMFE FBDI UJNF JU

DIBOHFT� 4P ZPVυMM QSPCBCMZ XBOU UP CPPLNBSL UIJT DIBQUFS BOE NFN�

PSJ[F TPNF PG UIF TUFQT CFDBVTF ZPVυMM CF SFQFBUJOH UIFN B MPU�

*O UIF QSFWJPVT DIBQUFS ZPV TBX IPX UP TFU VQ ZPVS EFWFMPQNFOU

FOWJSPONFOU XJUI BO PQUJPO UP SVO UIF ψ#VJMEω TUBHF XIJDI SFDPN�

QJMFT $1ZUIPO� #FGPSF UIF CVJME TUFQT XPSL ZPV SFRVJSF B $ DPNQJMFS

BOE TPNF CVJME UPPMT� 5IF UPPMT VTFE EFQFOE PO UIF PQFSBUJOH TZTUFN

ZPVυSF VTJOH TP TLJQ BIFBE UP UIF TFDUJPO GPS ZPVS 0QFSBUJOH 4ZTUFN�

/PUF

*G ZPVυSF DPODFSOFE UIBU BOZ PG UIFTF TUFQT XJMM JOUFSGFSF XJUI

ZPVS FYJTUJOH $1ZUIPO JOTUBMMBUJPOT EPOυU XPSSZ� 5IF $1ZUIPO

TPVSDF EJSFDUPSZ CFIBWFT MJLF B WJSUVBM FOWJSPONFOU�

'PS DPNQJMJOH $1ZUIPO NPEJGZJOH UIF TPVSDF BOE UIF TUBOEBSE

MJCSBSZ UIJT BMM TUBZT XJUIJO UIF TBOECPY PG UIF TPVSDF EJSFDUPSZ�

*G ZPV XBOU UP JOTUBMM ZPVS DVTUPN WFSTJPO UIJT TUFQ JT DPWFSFE

JO UIJT DIBQUFS�

��

Page 45: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO NBD04

$PNQJMJOH $1ZUIPO PO NBD04

$PNQJMJOH $1ZUIPO PO NBD04 SFRVJSFT TPNF BEEJUJPOBM BQQMJDBUJPOT

BOE MJCSBSJFT� :PV XJMM нSTU OFFE UIF FTTFOUJBM $ DPNQJMFS UPPMLJU�

ψ$PNNBOE -JOF %FWFMPQNFOU 5PPMTω JT BO BQQ UIBU ZPV DBO VQEBUF

JO NBD04 UISPVHI UIF "QQ 4UPSF� :PV OFFE UP QFSGPSN UIF JOJUJBM

JOTUBMMBUJPO PO UIF UFSNJOBM�

/PUF

5P PQFO VQ B UFSNJOBM JO NBD04 HP UP �TTHB+�iBQMb Pi?2`h2`KBM�H � :PV XJMM XBOU UP TBWF UIJT BQQ UP ZPVS %PDL TP SJHIU�

DMJDL UIF *DPO BOE TFMFDU E22T BM .Q+F

8JUIJO UIF UFSNJOBM JOTUBMM UIF $ DPNQJMFS BOE UPPMLJU CZ SVOOJOH UIF

GPMMPXJOH�

� [FRGH�VHOHFW ��LQVWDOO

5IJT DPNNBOE XJMM QPQ VQ XJUI B QSPNQU UP EPXOMPBE BOE JOTUBMM B

TFU PG UPPMT JODMVEJOH (JU .BLF BOE UIF (/6 $ DPNQJMFS�

:PVXJMM BMTP OFFE BXPSLJOH DPQZ PG 0QFO44- UP VTF GPS GFUDIJOH QBDL�

BHFT GSPN UIF 1Z1J�PSH XFCTJUF� *G ZPV MBUFS QMBO PO VTJOH UIJT CVJME

UP JOTUBMM BEEJUJPOBM QBDLBHFT 44- WBMJEBUJPO JT SFRVJSFE�

5IF TJNQMFTU XBZ UP JOTUBMM 0QFO44- PONBD04 JT CZ VTJOH)PNFCSFX�

/PUF

*G ZPV EPOυU IBWF )PNFCSFX ZPV DBO EPXOMPBE BOE JOTUBMM

)PNFCSFX EJSFDUMZ GSPN (JU)VC XJUI UIF GPMMPXJOH DPNNBOE�

� �XVU�ELQ�UXE\ �H ���FXUO �IV6/ ?

KWWSV���UDZ�JLWKXEXVHUFRQWHQW�FRP�+RPHEUHZ�LQVWDOO�PDVWHU�LQVWDOO��

0ODF ZPV IBWF )PNFCSFX JOTUBMMFE ZPV DBO JOTUBMM UIF EFQFOEFODJFT

GPS $1ZUIPO XJUI UIF EUHZ LQVWDOO DPNNBOE�

��

Page 46: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO NBD04

� EUHZ LQVWDOO RSHQVVO [] ]OLE JGEP VTOLWH

/PX UIBU ZPV IBWF UIF EFQFOEFODJFT ZPV DBO SVO UIF FRQILJXUH TDSJQU�

)PNFCSFX IBT B DPNNBOE EUHZ ��SUHIL[ >SDFNDJH@ UIBU XJMM HJWF UIF

EJSFDUPSZ XIFSF UIF QBDLBHF JT JOTUBMMFE� :PV XJMM FOBCMF TVQQPSU GPS

44- CZ DPNQJMJOH UIF MPDBUJPO UIBU )PNFCSFX VTFT�

5IF GMBH ��ZLWK�S\GHEXJ FOBCMFT EFCVH IPPLT� "EE UIJT JG ZPV JOUFOE PO

EFCVHHJOH GPS EFWFMPQNFOU PS UFTUJOH QVSQPTFT� %FCVHHJOH $1ZUIPO

JT DPWFSFE FYUFOTJWFMZ JO UIF %FCVHHJOH DIBQUFS�

5IF DPOнHVSBUJPO TUBHF POMZ OFFET UP CF SVO PODF BMTP TQFDJGZJOH UIF

MPDBUJPO PG UIF [MJC QBDLBHF�

� &33)/$*6 ��,��EUHZ ��SUHIL[ ]OLE��LQFOXGH� ?

/')/$*6 ��/��EUHZ ��SUHIL[ ]OLE��OLE� ?

��FRQILJXUH ��ZLWK�RSHQVVO ��EUHZ ��SUHIL[ RSHQVVO� ��ZLWK�S\GHEXJ

3VOOJOH FRQILJXUHXJMM HFOFSBUF B 0DNHILOH JO UIF SPPU PG UIF SFQPTJUPSZ

UIBU ZPV DBO VTF UP BVUPNBUF UIF CVJME QSPDFTT�

:PV DBO OPX CVJME UIF $1ZUIPO CJOBSZ CZ SVOOJOH�

� PDNH �M� �V

4FF "MTP

'PS NPSF IFMQ PO UIF PQUJPOT GPS PDNH TFF TFDUJPO " 2VJDL

1SJNFS PO .BLF�

%VSJOH UIF CVJME ZPV NBZ SFDFJWF TPNF FSSPST� *O UIF CVJME UIF TVN�

NBSZ PDNH XJMM OPUJGZ ZPV UIBU OPU BMM QBDLBHFT XFSF CVJMU� 'PS FYBN�

QMF RVVDXGLRGHY VSZG BOE BWNLQWHU XPVME GBJM UP CVJME XJUI UIJT TFU PG

JOTUSVDUJPOT� 5IBUυT PLBZ JG ZPV BSFOυU QMBOOJOH PO EFWFMPQJOH BHBJOTU

UIPTF QBDLBHFT� *G ZPV BSF UIFO DIFDL PVU UIF PпDJBM EFW HVJEF XFC�

TJUF GPS NPSF JOGPSNBUJPO�

5IF CVJME XJMM UBLF B GFX NJOVUFT BOE HFOFSBUF B CJOBSZ DBMMFE

S\WKRQ�H[H� &WFSZ UJNF ZPV NBLF DIBOHFT UP UIF TPVSDF DPEF ZPV XJMM

��

Page 47: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO -JOVY

OFFE UP SFSVO PDNH XJUI UIF TBNF GMBHT� 5IF S\WKRQ�H[H CJOBSZ JT UIF

EFCVH CJOBSZ PG $1ZUIPO� &YFDVUF S\WKRQ�H[H UP TFF B XPSLJOH 3&1-�

� ��S\WKRQ�H[H

3\WKRQ �����E� �WDJV�Y�����E����IH�FI� 0D\ �� ����� ���������

>&ODQJ ������ �FODQJ�������������@ RQ GDUZLQ

7\SH �KHOS�� �FRS\ULJKW�� �FUHGLWV� RU �OLFHQVH� IRU PRUH LQIRUPDWLRQ�

!!!

*NQPSUBOU

:FT UIBUυT SJHIU UIF NBD04 CVJME IBT B нMF FYUFOTJPO GPS �H[H�

5IJT FYUFOTJPO JT OPU CFDBVTF JUυT B 8JOEPXT CJOBSZ� #FDBVTF

NBD04IBT B DBTF�JOTFOTJUJWF нMFTZTUFNBOEXIFOXPSLJOHXJUI

UIF CJOBSZ UIF EFWFMPQFST EJEOυU XBOU QFPQMF UP BDDJEFOUBMMZ SF�

GFS UP UIF EJSFDUPSZ 3\WKRQ� TP �H[H XBT BQQFOEFE UP BWPJE BN�

CJHVJUZ� *G ZPV MBUFS SVO PDNH LQVWDOO PS PDNH DOWLQVWDOO JU XJMM

SFOBNF UIF нMF CBDL UP S\WKRQ CFGPSF JOTUBMMJOH JU JOUP ZPVS TZT�

UFN�

$PNQJMJOH $1ZUIPO PO -JOVY

5P DPNQJMF $1ZUIPO PO -JOVY ZPV нSTU OFFE UP EPXOMPBE BOE JOTUBMM

PDNH JFF FRQILJXUH BOE SNJFRQILJ�

'PS 'FEPSB $PSF 3)&- $FOU04 PS PUIFS ZVN�CBTFE TZTUFNT�

� VXGR \XP LQVWDOO \XP�XWLOV

'PS %FCJBO 6CVOUV PS PUIFS DSW�CBTFE TZTUFNT�

� VXGR DSW LQVWDOO EXLOG�HVVHQWLDO

5IFO JOTUBMM TPNF BEEJUJPOBM SFRVJSFE QBDLBHFT�

'PS 'FEPSB $PSF 3)&- $FOU04 PS PUIFS \XP�CBTFE TZTUFNT�

��

Page 48: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO -JOVY

� VXGR \XP�EXLOGGHS S\WKRQ�

'PS %FCJBO 6CVOUV PS PUIFS DSW�CBTFE TZTUFNT�

� VXGR DSW LQVWDOO OLEVVO�GHY ]OLE�J�GHY OLEQFXUVHV��GHY ?

OLEQFXUVHVZ��GHY OLEUHDGOLQH�GHY OLEVTOLWH��GHY OLEJGEP�GHY ?

OLEGE����GHY OLEE]��GHY OLEH[SDW��GHY OLEO]PD�GHY OLEIIL�GHY

/PX UIBU ZPV IBWF UIF EFQFOEFODJFT ZPV DBO SVO UIF FRQILJXUH TDSJQU

PQUJPOBMMZ FOBCMJOH UIF EFCVH IPPLT ��ZLWK�S\GHEXJ�

� ��FRQILJXUH ��ZLWK�S\GHEXJ

/FYU ZPV DBO CVJME UIF $1ZUIPO CJOBSZ CZ SVOOJOH UIF HFOFSBUFE

0DNHILOH�

� PDNH �M� �V

4FF "MTP

'PS NPSF IFMQ PO UIF PQUJPOT GPS PDNH TFF TFDUJPO " 2VJDL

1SJNFS PO .BLF�

3FWJFX UIF PVUQVU UP FOTVSF UIBU UIFSF XFSFOυU JTTVFT DPNQJMJOH UIF

BVVO NPEVMF� *G UIFSF XFSF DIFDL XJUI ZPVS EJTUSJCVUJPO GPS JOTUSVD�

UJPOT PO JOTUBMMJOH UIF IFBEFST GPS 0QFO44-�

%VSJOH UIF CVJME ZPV NBZ SFDFJWF TPNF FSSPST� *O UIF CVJME UIF TVN�

NBSZ PDNHXJMM OPUJGZ ZPV UIBU OPU BMM QBDLBHFT XFSF CVJMU� 5IBUυT PLBZ

JG ZPV BSFOυU QMBOOJOH PO EFWFMPQJOH BHBJOTU UIPTF QBDLBHFT� *G ZPV

BSF UIFO DIFDL PVU UIF QBDLBHF EFUBJMT GPS SFRVJSFE MJCSBSJFT�

5IF CVJME XJMM UBLF B GFX NJOVUFT BOE HFOFSBUF B CJOBSZ DBMMFE S\WKRQ�

5IJT JT UIF EFCVH CJOBSZ PG $1ZUIPO� &YFDVUF ��S\WKRQ UP TFF B XPSLJOH

3&1-�

� ��S\WKRQ

3\WKRQ �����E� �WDJV�Y�����E����IH�FI� 0D\ �� ����� ���������

>&ODQJ ������ �FODQJ�������������@ RQ /LQX[

��

Page 49: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

*OTUBMMJOH B $VTUPN 7FSTJPO

7\SH �KHOS�� �FRS\ULJKW�� �FUHGLWV� RU �OLFHQVH� IRU PRUH LQIRUPDWLRQ�

!!!

*OTUBMMJOH B $VTUPN 7FSTJPO

'SPN ZPVS TPVSDF SFQPTJUPSZ JG ZPVυSF IBQQZ XJUI ZPVS DIBOHFT BOE

XBOU UP VTF UIFN JOTJEF ZPVS TZTUFN ZPV DBO JOTUBMM JU BT B DVTUPN

WFSTJPO�

'PS NBD04 BOE -JOVY ZPV DBO VTF UIF DOWLQVWDOO DPNNBOE XIJDI

XPOυU DSFBUF TZNMJOLT GPS S\WKRQ� BOE JOTUBMM B TUBOEBMPOF WFSTJPO�

� PDNH DOWLQVWDOO

'PS 8JOEPXT ZPV IBWF UP DIBOHF UIF CVJME DPOнHVSBUJPO GSPN 'HEXJ

UP 5HOHDVH UIFO DPQZ UIF QBDLBHFE CJOBSJFT UP B EJSFDUPSZ PO ZPVS DPN�

QVUFS XIJDI JT QBSU PG UIF TZTUFN QBUI�

" 2VJDL 1SJNFS PO .BLF

"T B 1ZUIPO EFWFMPQFS ZPV NJHIU OPU IBWF DPNF BDSPTT PDNH CFGPSF

PS QFSIBQT ZPV IBWF CVU IBWFOυU TQFOU NVDI UJNF XJUI JU� 'PS $ $��

BOE PUIFS DPNQJMFE MBOHVBHFT UIF OVNCFS PG DPNNBOET ZPV OFFE

UP FYFDVUF UP MPBE MJOL BOE DPNQJMF ZPVS DPEF JO UIF SJHIU PSEFS DBO

CF FYIBVTUJWF� 8IFO DPNQJMJOH BQQMJDBUJPOT GSPN TPVSDF ZPV OFFE

UP MJOL BOZ FYUFSOBM MJCSBSJFT JO UIF TZTUFN� *U XPVME CF VOSFBMJTUJD

UP FYQFDU UIF EFWFMPQFS UP LOPX UIF MPDBUJPOT PG BMM PG UIFTF MJCSBSJFT

BOE DPQZ�QBTUF UIFN JOUP UIF DPNNBOE MJOF TP PDNH BOE FRQILJXUH

BSF DPNNPOMZ VTFE JO $�$�� QSPKFDUT UP BVUPNBUF UIF DSFBUJPO PG B

CVJME TDSJQU� 8IFO ZPV FYFDVUFE ��FRQILJXUH DXWRFRQI TFBSDIFE ZPVS

TZTUFN GPS UIF MJCSBSJFT UIBU $1ZUIPO SFRVJSFT BOE DPQJFE UIFJS QBUIT

JOUP 0DNHILOH�

5IF HFOFSBUFE 0DNHILOH JT TJNJMBS UP B TIFMM TDSJQU CSPLFO JOUP TFDUJPOT

DBMMFE ωUBSHFUT�ϊ

��

Page 50: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

" 2VJDL 1SJNFS PO .BLF

5BLF UIF GRFFOHDQ UBSHFU BT BO FYBNQMF� 5IJT UBSHFU EFMFUFT TPNF HFO�

FSBUFE EPDVNFOUBUJPO нMFT VTJOH UIF UP DPNNBOE�

GRFFOHDQ�

�UP �UI 'RF�EXLOG

�UP �UI 'RF�WRROV�VSKLQ[ 'RF�WRROV�S\JPHQWV 'RF�WRROV�GRFXWLOV

5P FYFDVUF UIJT UBSHFU SVO PDNH GRFFOHDQ� GRFFOHDQ JT B TJNQMF UBSHFU BT

JU POMZ SVOT UXP DPNNBOET�

5IF DPOWFOUJPO GPS FYFDVUJOH BOZ NBLF UBSHFU JT�

� PDNH >RSWLRQV@ >WDUJHW@

*G ZPV DBMM PDNH XJUIPVU TQFDJGZJOH B UBSHFU� PDNH XJMM SVO UIF EFGBVMU

UBSHFU XIJDI JT UIF нSTU TQFDJнFE JO UIF 0DNHILOH� 'PS $1ZUIPO UIJT JT

UIF DOO UBSHFU XIJDI DPNQJMFT BMM QBSUT PG $1ZUIPO�

.BLF IBT NBOZ PQUJPOT TP IFSF BSF UIF POFT * UIJOL ZPVυMM нOE VTFGVM

UISPVHIPVU UIJT CPPL�

0QUJPO 6TF

�G ��GHEXJ> )/$*6@ 1SJOU WBSJPVT UZQFT PG EFCVHHJOH JOGPSNBUJPO

�H ��HQYLURQPHQW�RYHUULGHV &OWJSPONFOU WBSJBCMFT PWFSSJEF NBLFнMFT

�L ��LJQRUH�HUURUV *HOPSF FSSPST GSPN DPNNBOET

�M >1@ ��MREV> 1@ "MMPX / KPCT BU PODF JOнOJUF KPCT PUIFSXJTF

�N ��NHHS�JRLQJ ,FFQ HPJOH XIFO TPNF UBSHFUT DBOυU CF NBEF

�O >1@ ��ORDG�DYHUDJH> 1@

��PD[�ORDG> 1@

0OMZ TUBSU NVMUJQMF KPCT JG MPBE � /

�Q ��GU\�UXQ 1SJOU DPNNBOET JOTUFBE PG SVOOJOH UIFN�

�V ��VLOHQW %POυU FDIP DPNNBOET�

�6 ��VWRS 5VSOT Pм �N�

*O UIF OFYU TFDUJPO BOE UISPVHIPVU UIF CPPL *υN HPJOH UP BTL ZPV UP

SVO PDNH XJUI UIF PQUJPOT�

� PDNH �M� �V >WDUJHW@

5IF �M� GMBH BMMPXT PDNH UP SVO � KPCT TJNVMUBOFPVTMZ� *G ZPV IBWF �

��

Page 51: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$1ZUIPOυT .BLF 5BSHFUT

PS NPSF DPSFT ZPV DBO DIBOHF UIJT UP � PS MBSHFS BOE UIF DPNQJMBUJPO

XJMM DPNQMFUF GBTUFS� 5IF �V GMBH TUPQT UIF 0DNHILOH GSPN QSJOUJOH FWFSZ

DPNNBOE JU SVOT UP UIF DPOTPMF� *G ZPV XBOU UP TFF XIBU JT IBQQFOJOH

SFNPWF UIF �V GMBH�

$1ZUIPOφT .BLF 5BSHFUT

'PS CPUI -JOVY BOE NBD04 ZPV XJMM нOE ZPVSTFMG OFFEJOH UP DMFBO VQ

нMFT CVJME PS UP SFGSFTI DPOнHVSBUJPO�

5IFSF BSF B OVNCFS PG VTFGVM NBLF UBSHFUT CVJMU JOUP $1ZUIPOυT .BLF�

нMF�

#VJME 5BSHFUT

5BSHFU 1VSQPTF

DOO EFGBVMU #VJME UIF DPNQJMFS MJCSBSJFT BOE NPEVMFT

SURILOH�RSW $PNQJMF UIF 1ZUIPO CJOBSZ XJUI QSPнMF HVJEFE

PQUJNJ[BUJPO

FOLQLF 3VO ψ"SHVNFOU $MJOJDω PWFS BMM TPVSDF нMFT

VKDUHGPRGV #VJME UIF TIBSFE NPEVMFT

UHJHQ�DOO 3FHFOFSBUF BMM HFOFSBUFE нMFT

5FTU 5BSHFUT

5BSHFU 1VSQPTF

WHVW 3VO B CBTJD TFU PG SFHSFTTJPO UFTUT

WHVWDOO 3VO UIF GVMM UFTU TVJUF UXJDF � PODF XJUIPVU �QZD нMFT BOE

PODF XJUI

TXLFNWHVW 3VO B GBTUFS TFU PG SFHSFTTJPO UFTUT FYDMVEJOH UIF UFTUT

UIBU UBLF B MPOH UJNF

WHVWXQLYHUVDO 3VO UIF UFTU TVJUF GPS CPUI BSDIJUFDUVSFT JO B 6OJWFSTBM

CVJME PO 049

FRYHUDJH $PNQJMF BOE SVO UFTUT XJUI HDPW

FRYHUDJH�OFRY $SFBUF DPWFSBHF )5.- SFQPSUT

��

Page 52: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$1ZUIPOυT .BLF 5BSHFUT

$MFBOJOH 5BSHFUT

5IF QSJNBSZ DMFBO UBSHFUT BSF FOHDQ FOREEHU BOE GLVWFOHDQ� 5IF FOHDQ

UBSHFU JT GPS HFOFSBMMZ SFNPWJOH DPNQJMFE BOE DBDIFE MJCSBSJFT BOE

QZD нMFT� *G ZPV нOE UIBU FOHDQ EPFTOυU EP UIF KPC USZ FOREEHU� 'PS

DPNQMFUFMZ DMFBOJOH PVU BO FOWJSPONFOU CFGPSF EJTUSJCVUJPO SVO UIF

GLVWFOHDQ UBSHFU�

5BSHFU 1VSQPTF

FKHFN�FOHDQ�VUF $IFDL UIBU UIF TPVSDF JT DMFBO XIFO CVJMEJOH PVU PG

TPVSDF

FOHDQWHVW 3FNPWF ωUFTU@QZUIPO@�ω EJSFDUPSJFT PG QSFWJPVT GBJMFE

UFTU KPCT

FOHDQ 3FNPWF QZD нMFT DPNQJMFE MJCSBSJFT BOE QSPнMFT

S\FUHPRYDO 3FNPWF QZD нMFT

GRFFOHDQ 3FNPWF CVJMU EPDVNFOUBUJPO JO %PD�

SURILOH�UHPRYDO 3FNPWF BOZ PQUJNJ[BUJPO QSPнMFT

FOREEHU 4BNF BT FOHDQ CVU BMTP SFNPWFT MJCSBSJFT UBHT

DPOнHVSBUJPOT BOE CVJMET

GLVWFOHDQ 4BNF BT FOREEHU CVU BMTP SFNPWFT BOZUIJOH HFOFSBUFE

GSPN TPVSDF F�H� .BLFнMF

*OTUBMMBUJPO 5BSHFUT

5IFSF BSF UXP GMBWPST GPS UIF JOTUBMMBUJPO UBSHFUT UIF EFGBVMU WFSTJPO

F�H� LQVWDOO BOE UIF DOW WFSTJPO F�H� DOWLQVWDOO� *G ZPV XBOU UP JOTUBMM

UIF DPNQJMFE WFSTJPO POUP ZPVS DPNQVUFS CVU EPOυU XBOU JU UP CFDPNF

UIF EFGBVMU 1ZUIPO � JOTUBMMBUJPO VTF UIF DOW WFSTJPO PG UIF DPNNBOET�

"GUFS JOTUBMMJOH VTJOH PDNH LQVWDOO UIF DPNNBOE S\WKRQ� XJMM OPX MJOL

UP ZPVS DPNQJMFE CJOBSZ�

8IFSFBT VTJOH PDNH DOWLQVWDOO POMZ S\WKRQ��9(56,21� XJMM CF JOTUBMMFE

BOE UIF FYJTUJOH MJOL GPS S\WKRQ� XJMM SFNBJO JOUBDU�

5BSHFU 1VSQPTF

LQVWDOO *OTUBMMT TIBSFE MJCSBSJFT CJOBSJFT BOE EPDVNFOUBUJPO�

8JMM SVO FRPPRQLQVWDOO ELQLQVWDOO BOE PDQLQVWDOO

ELQLQVWDOO *OTUBMMT BMM UIF CJOBSJFT F�H� S\WKRQ LGOH �WR�

DOWLQVWDOO *OTUBMMT TIBSFE MJCSBSJFT CJOBSJFT BOE EPDVNFOUBUJPO

XJUI UIF WFSTJPO TVпY

��

Page 53: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO 8JOEPXT

5BSHFU 1VSQPTF

PDQLQVWDOO *OTUBMM UIF NBOVBMT

DOWPDQLQVWDOO *OTUBMM UIF WFSTJPOFE NBOVBMT

DOWELQLQVWDOO *OTUBMM UIF S\WKRQ JOUFSQSFUFS XJUI UIF WFSTJPO BпYFE

F�H� S\WKRQ���

FRPPRQLQVWDOO *OTUBMM TIBSFE MJCSBSJFT BOE NPEVMFT

OLELQVWDOO *OTUBMM TIBSFE MJCSBSJFT

VKDUHGLQVWDOO %ZOBNJDBMMZ MPBEFE NPEVMFT

.JTDFMMBOFPVT 5BSHFUT

5BSHFU 1VSQPTF

S\WKRQ�FRQILJ (FOFSBUF UIF S\WKRQ�FRQILJ TDSJQU

UHFKHFN 3FSVO DPOнHVSF XJUI UIF TBNF PQUJPOT BT JU XBT SVO MBTU

UJNF

DXWRFRQI 3FHFOFSBUF DPOнHVSF BOE QZDPOнH�I�JO

WDJV $SFBUF B UBHT нMF GPS WJ

7$*6 $SFBUF B UBHT нMF GPS FNBDT

VPHOO\ $IFDL UIBU FYQPSUFE TZNCPMT TUBSU 3\ PS B3\ TFF 1&1�

$PNQJMJOH $1ZUIPO PO8JOEPXT

5IFSF BSF UXPXBZT UP DPNQJMF UIF$1ZUIPO CJOBSJFT BOE MJCSBSJFT GSPN

8JOEPXT�

5IF нSTU JT UP DPNQJMF GSPN UIF DPNNBOE MJOF UIJT TUJMM SFRVJSFT UIF

.JDSPTPGU 7JTVBM $�� DPNQJMFS XIJDI DPNFT XJUI 7JTVBM 4UVEJP� 5IF

TFDPOE JT UP PQFO UIF 3&%XLOG SFEXLOG�VOQ GSPN7JTVBM 4UVEJP BOE CVJME

EJSFDUMZ�

*OTUBMMJOH UIF %FQFOEFODJFT

'PS FJUIFS UIF DPNNBOE MJOF DPNQJMF TDSJQU PS UIF 7JTVBM 4UVEJP TPMV�

UJPO ZPV OFFE UP JOTUBMM TFWFSBM FYUFSOBM UPPMT MJCSBSJFT BOE $ IFBE�

FST�

*OTJEF UIF 3&%XLOG GPMEFS UIFSF JT B �EDW нMF UIBU BVUPNBUFT UIJT GPS ZPV�

��

Page 54: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO 8JOEPXT

0QFO VQ B DPNNBOE�MJOF QSPNQU JOTJEF 3&%XLOG BOE FYFDVUF 3&%XLOG

JHWBH[WHUQDOV�EDW�

! JHWBH[WHUQDOV�EDW

8VLQJ S\ ���� �IRXQG ��� ZLWK S\�H[H�

)HWFKLQJ H[WHUQDO OLEUDULHV���

)HWFKLQJ E]LS����������

)HWFKLQJ VTOLWH������������

)HWFKLQJ []���������

)HWFKLQJ ]OLE����������

)HWFKLQJ H[WHUQDO ELQDULHV���

)HWFKLQJ RSHQVVO�ELQ������G���

)HWFKLQJ WFOWN�����������

)LQLVKHG�

/PX ZPV DBO DPNQJMF GSPN UIF DPNNBOE MJOF PS 7JTVBM 4UVEJP�

$PNQJMJOH 'SPN UIF $PNNBOE -JOF

5P DPNQJMF GSPN UIF DPNNBOE MJOF ZPV OFFE UP TFMFDU UIF $16 BS�

DIJUFDUVSF ZPV XBOU UP DPNQJMF BHBJOTU� 5IF EFGBVMU JT XJO�� CVU UIF

DIBODFT BSF ZPV XBOU B ���CJU DPG�� CJOBSZ�

*G ZPV EP BOZ EFCVHHJOH UIF EFCVH CVJME DPNFT XJUI UIF BCJMJUZ UP

BUUBDI CSFBLQPJOUT JO UIF TPVSDF DPEF� 5P FOBCMF UIF EFCVH CVJME ZPV

BEE �F 'HEXJ UP TQFDJGZ UIF %FCVH DPOнHVSBUJPO�

#Z EFGBVMU EXLOG�EDW XJMM GFUDI FYUFSOBM EFQFOEFODJFT CVU CFDBVTF

XFυWF BMSFBEZ EPOF UIBU TUFQ JU XJMM QSJOU B NFTTBHF TLJQQJOH EPXO�

MPBET�

! EXLOG�EDW �S [�� �F 'HEXJ

5IJT DPNNBOEXJMM QSPEVDF UIF 1ZUIPO CJOBSZ 3&EXLOG DPG�� S\WKRQB�

G�H[H� 4UBSU UIBU CJOBSZ EJSFDUMZ GSPN UIF DPNNBOE MJOF�

! DPG��?S\WKRQBG�H[H

3\WKRQ �����E� �WDJV�Y�����E����IH�FI� 0D\ �� ����� ���������

��

Page 55: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO 8JOEPXT

>06& Y����� �� ELW �$0'���@ RQ ZLQ��

7\SH �KHOS�� �FRS\ULJKW�� �FUHGLWV� RU �OLFHQVH� IRU PRUH LQIRUPDWLRQ�

!!!

:PV BSF OPX JOTJEF UIF 3&1- PG ZPVS DPNQJMFE $1ZUIPO CJOBSZ�

5P DPNQJMF B SFMFBTF CJOBSZ�

! EXLOG�EDW �S [�� �F 5HOHDVH

5IJT DPNNBOE XJMM QSPEVDF UIF CJOBSZ 3&EXLOG DPG�� S\WKRQ�H[H�

/PUF

5IF TVпY BG TQFDJнFT UIBU $1ZUIPO XBT CVJMU JO UIF 'HEXJ DPO�

нHVSBUJPO�

5IF SFMFBTFE CJOBSJFT PO QZUIPO�PSH BSF DPNQJMFE JO UIF

1SPнMF�(VJEFE�0QUJNJ[BUJPO 1(0 DPOнHVSBUJPO� 4FF UIF

1SPнMF�(VJEFE�0QUJNJ[BUJPO 1(0 TFDUJPO BU UIF FOE PG UIJT

DIBQUFS GPS NPSF EFUBJMT PO 1(0�

"SHVNFOUT

5IF GPMMPXJOH BSHVNFOUT BSF BWBJMBCMF JO EXLOG�EDW�

'MBH 1VSQPTF &YQFDUFE 7BMVF

�S #VJME QMBUGPSN $16

BSDIJUFDUVSF

[�� :LQ�� EFGBVMU $50 $50��

�F #VJME DPOнHVSBUJPO 5HOHDVH EFGBVMU 'HEXJ 3*,QVWUXPHQW

PS 3*8SGDWH

�W #VJME UBSHFU %XLOG EFGBVMU 5HEXLOG &OHDQ

&OHDQ$OO

'MBHT

)FSF BSF TPNF PQUJPOBM GMBHT ZPV DBO VTF GPS EXLOG�EDW� 'PS B GVMM MJTU

SVO EXLOG�EDW �K�

��

Page 56: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO 8JOEPXT

'MBH 1VSQPTF

�Y 7FSCPTF NPEF� 4IPX JOGPSNBUJPOBM NFTTBHFT EVSJOH CVJME

�YY 7FSZ WFSCPTF NPEF� 4IPX EFUBJMFE NFTTBHFT EVSJOH CVJME

�T 2VJFU NPEF� 0OMZ TIPX XBSOJOH BOE FSSPST EVSJOH CVJME

�H %PXOMPBE BOE JOTUBMM FYUFSOBM EFQFOEFODJFT EFGBVMU

�( %POφU EPXOMPBE BOE JOTUBMM FYUFSOBM EFQFOEFODJFT

��SJR #VJME XJUI QSPнMF�HVJEFE�PQUJNJ[BUJPO

��UHJHQ 3FHFOFSBUF BMM HSBNNBS BOE UPLFOT VTFE XIFO ZPV VQEBUF

UIF MBOHVBHF

$PNQJMJOH 'SPN 7JTVBM 4UVEJP

*OTJEF UIF 3&%XLOG GPMEFS JT B 7JTVBM 4UVEJP QSPKFDU нMF 3&%XLOG

SFEXLOG�VOQ GPS CVJMEJOH BOE FYQMPSJOH $1ZUIPO TPVSDF DPEF�

8IFO UIF 4PMVUJPO JT MPBEFE JU XJMM QSPNQU ZPV UP SFUBSHFU UIF

QSPKFDUυT JOTJEF UIF 4PMVUJPO UP UIF WFSTJPO PG UIF $�$�� DPNQJMFS

ZPV IBWF JOTUBMMFE� 7JTVBM 4UVEJP XJMM BMTP UBSHFU UIF SFMFBTF PG UIF

8JOEPXT 4%, ZPV IBWF JOTUBMMFE�

&OTVSF UIBU ZPV DIBOHF UIF 8JOEPXT 4%, WFSTJPO UP UIF OFXFTU JO�

TUBMMFE WFSTJPO BOE UIF QMBUGPSN UPPMTFU UP UIF MBUFTU WFSTJPO� *G ZPV

NJTTFE UIJT XJOEPX ZPV DBO SJHIU�DMJDL PO UIF 4PMVUJPO JO UIF 4PMV�

UJPOT BOE 1SPKFDUT XJOEPX BOE DMJDL 3FUBSHFU 4PMVUJPO�

/BWJHBUF UP "mBH/ *QM};m`�iBQM J�M�;2` BOE FOTVSF UIF ψ"DUJWF TPMV�

UJPO DPOнHVSBUJPOω JT TFU UP 'HEXJ BOE UIF ψ"DUJWF 4PMVUJPO 1MBUGPSNω

JT TFU UP [�� GPS ���CJU $16 BSDIJUFDUVSF PS ZLQ�� GPS ���CJU�

/FYU CVJME $1ZUIPO CZ QSFTTJOH *h_G Y a>A6h Y " PS DIPPTJOH

"mBH/ "mBH/ aQHmiBQM � *G ZPV SFDFJWF BOZ FSSPST BCPVU UIF 8JOEPXT

4%, CFJOH NJTTJOH NBLF TVSF ZPV TFU UIF SJHIU UBSHFUJOH TFUUJOHT JO

UIF 3FUBSHFU 4PMVUJPO XJOEPX� :PV TIPVME BMTP TFF 8JOEPXT ,JUT JO�

TJEF ZPVS 4UBSU .FOV BOE8JOEPXT 4PGUXBSF %FWFMPQNFOU ,JU JOTJEF

PG UIBU NFOV�

5IF CVJME TUBHF DPVME UBLF ��NJOVUFT PSNPSF UIF нSTU UJNF� 0ODF UIF

CVJME DPNQMFUFT ZPV NBZ TFF B GFX XBSOJOHT UIBU ZPV DBO JHOPSF�

��

Page 57: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO 8JOEPXT

5P TUBSU UIF EFCVH WFSTJPO PG $1ZUIPO QSFTT 68 BOE $1ZUIPO XJMM

TUBSU JO %FCVH NPEF TUSBJHIU JOUP UIF 3&1-�

:PV DBO SVO UIF 3FMFBTF CVJME CZ DIBOHJOH UIF CVJME DPOнHVSBUJPO

GSPN %FCVH UP 3FMFBTF PO UIF UPQ NFOV CBS BOE SFSVOOJOH "mBH/"mBH/ aQHmiBQM � :PV OPX IBWF CPUI %FCVH BOE 3FMFBTF WFSTJPOT PG

UIF $1ZUIPO CJOBSZ XJUIJO 3&%XLOG DPG���

:PV DBO TFU VQ 7JTVBM 4UVEJP UP CF BCMF UP PQFO B 3&1- XJUI

FJUIFS UIF 3FMFBTF PS %FCVH CVJME CZ DIPPTJOH hQQHb Svi?QMSvi?QM 1MpB`QMK2Mib GSPN UIF UPQ NFOV�

*O UIF 1ZUIPO &OWJSPONFOUT QBOFM DMJDL "EE &OWJSPONFOU BOE UIFO

UBSHFU UIF %FCVH PS 3FMFBTF CJOBSZ� 5IF %FCVH CJOBSZ XJMM FOE JO

BG�H[H� 'PS FYBNQMF S\WKRQBG�H[H BOE S\WKRQZBG�H[H� :PV XJMM NPTU

MJLFMZ XBOU UP VTF UIF EFCVH CJOBSZ BT JU DPNFT XJUI %FCVHHJOH TVQ�

QPSU JO 7JTVBM 4UVEJP BOE XJMM CF VTFGVM GPS UIJT CPPL�

*O UIF "EE &OWJSPONFOU XJOEPX UBSHFU UIF S\WKRQBG�H[H нMF BT UIF JO�

UFSQSFUFS JOTJEF 3&%XLOG DPG�� BOE UIF S\WKRQZBG�H[H BT UIF XJOEPXFE

JOUFSQSFUFS�

��

Page 58: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PNQJMJOH $1ZUIPO PO 8JOEPXT

4UBSU B 3&1- TFTTJPO CZ DMJDLJOH PT2M AMi2`�+iBp2 qBM/Qr JO UIF 1ZUIPO

&OWJSPONFOUT XJOEPX BOE ZPV XJMM TFF UIF 3&1- GPS UIF DPNQJMFE

WFSTJPO PG 1ZUIPO�

%VSJOH UIJT CPPL UIFSF XJMM CF 3&1- TFTTJPOT XJUI FYBNQMF DPN�

NBOET� * FODPVSBHF ZPV UP VTF UIF %FCVH CJOBSZ UP SVO UIFTF 3&1-

TFTTJPOT JO DBTF ZPV XBOU UP QVU JO BOZ CSFBLQPJOUT XJUIJO UIF DPEF�

��

Page 59: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

1SPнMF (VJEFE 0QUJNJ[BUJPO

5P NBLF JU FBTJFS UP OBWJHBUF UIF DPEF JO UIF 4PMVUJPO 7JFX DMJDL PO

UIF UPHHMF CVUUPO OFYU UP UIF )PNF JDPO UP TXJUDI UP 'PMEFS WJFX�

1SPрMF (VJEFE 0QUJNJ[BUJPO

5IF NBD04 -JOVY BOE 8JOEPXT CVJME QSPDFTTFT IBWF GMBHT GPS

ψ1(0 ω PS ψ1SPнMF (VJEFE 0QUJNJ[BUJPO�ω 1(0 JT OPU TPNFUIJOH DSF�

BUFE CZ UIF 1ZUIPO UFBN CVU B GFBUVSF PG NBOZ DPNQJMFST JODMVEJOH

UIPTF VTFE CZ $1ZUIPO�

1(0XPSLT CZ EPJOH BO JOJUJBM DPNQJMBUJPO UIFO QSPнMJOH UIF BQQMJDB�

UJPO CZ SVOOJOH B TFSJFT PG UFTUT� 5IF QSPнMF DSFBUFE JT UIFO BOBMZ[FE

BOE UIF DPNQJMFS XJMM NBLF DIBOHFT UP UIF CJOBSZ UIBU XPVME JNQSPWF

QFSGPSNBODF�

'PS $1ZUIPO UIF QSPнMJOH TUBHF SVOT S\WKRQ �P WHVW ��SJR XIJDI FY�

FDVUFT UIF SFHSFTTJPO UFTUT TQFDJнFE JO /LE WHVW OLEUHJUWHVW SJR�S\�

5IFTF UFTUT IBWF CFFO TQFDJнDBMMZ TFMFDUFE CFDBVTF UIFZ VTF B DPN�

NPOMZ VTFE $ FYUFOTJPO NPEVMF PS UZQF�

��

Page 60: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

1SPнMF (VJEFE 0QUJNJ[BUJPO

/PUF

5IF 1(0 QSPDFTT JT UJNF�DPOTVNJOH TP UISPVHIPVU UIJT CPPL

*υWF FYDMVEFE JU GSPN UIF MJTU PG SFDPNNFOEFE TUFQT UP LFFQ

ZPVS DPNQJMBUJPO UJNF TIPSU� *G ZPV XBOU UP EJTUSJCVUF B DVTUPN

DPNQJMFE WFSTJPO PG $1ZUIPO JOUP B QSPEVDUJPO FOWJSPONFOU

ZPV TIPVME SVO ��FRQILJXUH XJUI UIF ��ZLWK�SJR GMBH JO -JOVY

BOE NBD04 BOE VTF UIF ��SJR GMBH JO EXLOG�EDW PO 8JOEPXT�

#FDBVTF UIF PQUJNJ[BUJPOT BSF TQFDJнD UP UIF QMBUGPSN BOE BSDIJUFD�

UVSF UIBU UIF QSPнMF XBT FYFDVUFE PO 1(0 QSPнMFT DBOOPU CF TIBSFE

CFUXFFO PQFSBUJOH TZTUFNT PS $16 BSDIJUFDUVSFT� 5IF EJTUSJCVUJPOT

PG $1ZUIPO PO QZUIPO�PSH IBWF BMSFBEZ CFFO UISPVHI 1(0 TP JG ZPV

SVO B CFODINBSL PO B WBOJMMB�DPNQJMFE CJOBSZ JU XJMM CF TMPXFS UIBO

POF EPXOMPBEFE GSPN QZUIPO�PSH�

5IF8JOEPXT NBD04 BOE-JOVY QSPнMF�HVJEFE PQUJNJ[BUJPOT JODMVEF

UIFTF DIFDLT BOE JNQSPWFNFOUT�

ύ 'VODUJPO *OMJOJOH � *G B GVODUJPO JT SFHVMBSMZ DBMMFE GSPN BOPUIFS

GVODUJPO UIFO JU XJMM CF ψJOMJOFEω UP SFEVDF UIF TUBDL�TJ[F�

ύ 7JSUVBM $BMM 4QFDVMBUJPO BOE *OMJOJOH � *G B WJSUVBM GVODUJPO

DBMM GSFRVFOUMZ UBSHFUT B DFSUBJO GVODUJPO 1(0 DBO JOTFSU B DPOEJ�

UJPOBMMZ FYFDVUFE EJSFDU DBMM UP UIBU GVODUJPO� 5IF EJSFDU DBMM DBO

UIFO CF JOMJOFE�

ύ 3FHJTUFS "MMPDBUJPO 0QUJNJ[BUJPO � #BTFE PO QSPнMF EBUB SF�

TVMUT UIF 1(0 XJMM PQUJNJ[F SFHJTUFS BMMPDBUJPO�

ύ #BTJD #MPDL 0QUJNJ[BUJPO � #BTJD CMPDL PQUJNJ[BUJPO BMMPXT

DPNNPOMZ FYFDVUFE CBTJD CMPDLT UIBU UFNQPSBMMZ FYFDVUF XJUIJO

B HJWFO GSBNF UP CF QMBDFE JO UIF TBNF TFU PG QBHFT MPDBMJUZ� *U

NJOJNJ[FT UIF OVNCFS PG QBHFT VTFE XIJDI NJOJNJ[FT NFNPSZ

PWFSIFBE�

ύ )PU�4QPU 0QUJNJ[BUJPO � 'VODUJPOT XIFSF UIF QSPHSBN TQFOET

UIF NPTU FYFDVUJPO UJNF DBO CF PQUJNJ[FE GPS TQFFE�

ύ 'VODUJPO-BZPVU0QUJNJ[BUJPO � "GUFS BOBMZ[JOH UIF DBMM HSBQI

��

Page 61: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

$PODMVTJPO

GVODUJPOT UIBU UFOE UP CF BMPOH UIF TBNF FYFDVUJPO QBUI BSFNPWFE

UP UIF TBNF TFDUJPO PG UIF DPNQJMFE BQQMJDBUJPO�

ύ $POEJUJPOBM #SBODI 0QUJNJ[BUJPO � 1(0 DBO MPPL BU B EFDJ�

TJPO CSBODI MJLF BO LI��HOVH LI PS VZLWFK TUBUFNFOU BOE TQPU UIF

NPTU DPNNPOMZ VTFE QBUI� 'PS FYBNQMF JG UIFSF BSF �� DBTFT JO

B VZLWFK TUBUFNFOU BOE POF JT VTFE ��� PG UIF UJNF UIFO JU XJMM

CF NPWFE UP UIF UPQ TP UIBU JU XJMM CF FYFDVUFE JNNFEJBUFMZ JO UIF

DPEF QBUI�

ύ %FBE�4QPU 4FQBSBUJPO � $PEF UIBU JTOυU DBMMFE EVSJOH 1(0 JT

NPWFE UP B TFQBSBUF TFDUJPO PG UIF BQQMJDBUJPO�

$PODMVTJPO

*O UIJT DIBQUFS ZPVυWF TFFO IPX UP DPNQJMF $1ZUIPO TPVSDF DPEF JOUP

B XPSLJOH JOUFSQSFUFS� :PV DBO VTF UIJT LOPXMFEHF UISPVHIPVU UIF

CPPL BT ZPV FYQMPSF BOE BEBQU UIF TPVSDF DPEF�

:PVNJHIU OFFE UP SFQFBU UIF DPNQJMBUJPO TUFQT UFOT PS FWFOIVOESFET

PG UJNFT XIFO XPSLJOH XJUI $1ZUIPO� *G ZPV DBO BEBQU ZPVS EFWFMPQ�

NFOU FOWJSPONFOU UP DSFBUF TIPSUDVUT GPS SFDPNQJMBUJPO JU JT CFUUFS UP

EP UIBU OPX BOE TBWF ZPVSTFMG B MPU PG UJNF�

��

Page 62: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IF 1ZUIPO -BOHVBHF BOE

(SBNNBS

5IF QVSQPTF PG B DPNQJMFS JT UP DPOWFSU POF MBOHVBHF JOUP BOPUIFS�

5IJOL PG B DPNQJMFS MJLF B USBOTMBUPS� :PV XPVME IJSF B USBOTMBUPS UP

MJTUFO UP ZPV TQFBLJOH JO &OHMJTI BOE UIFO TQFBL JO +BQBOFTF�

5P BDDPNQMJTI UIJT UIF USBOTMBUPS NVTU VOEFSTUBOE UIF HSBNNBUJDBM

TUSVDUVSFT PG UIF TPVSDF BOE UBSHFU MBOHVBHFT�

4PNF DPNQJMFST XJMM DPNQJMF JOUP B MPX�MFWFMNBDIJOF DPEF XIJDI DBO

CF FYFDVUFE EJSFDUMZ PO B TZTUFN� 0UIFS DPNQJMFST XJMM DPNQJMF JOUP

BO JOUFSNFEJBSZ MBOHVBHF UP CF FYFDVUFE CZ B WJSUVBM NBDIJOF�

" DPOTJEFSBUJPO XIFO DIPPTJOH B DPNQJMFS JT UIF TZTUFN QPSUBCJMJUZ

SFRVJSFNFOUT� +BWB BOE �/&5 $-3 XJMM DPNQJMF JOUP BO *OUFSNFEJ�

BSZ -BOHVBHF TP UIBU UIF DPNQJMFE DPEF JT QPSUBCMF BDSPTT NVMUJQMF

TZTUFNT BSDIJUFDUVSFT� $ (P $�� BOE 1BTDBM XJMM DPNQJMF JOUP BO FY�

FDVUBCMF CJOBSZ� 5IJT CJOBSZ JT CVJMU GPS UIF QMBUGPSN PO XIJDI JU XBT

DPNQJMFE�

1ZUIPO BQQMJDBUJPOT BSF UZQJDBMMZ EJTUSJCVUFE BT TPVSDF DPEF� 5IF SPMF

PG UIF 1ZUIPO JOUFSQSFUFS JT UP DPOWFSU UIF 1ZUIPO TPVSDF DPEF BOE

FYFDVUF JU JO POF TUFQ� 5IF $1ZUIPO SVOUJNF EPFT DPNQJMF ZPVS DPEF

XIFO JU SVOT GPS UIF нSTU UJNF� 5IJT TUFQ JT JOWJTJCMF UP UIF SFHVMBS VTFS�

1ZUIPO DPEF JT OPU DPNQJMFE JOUP NBDIJOF DPEF� JU JT DPNQJMFE JOUP

B MPX�MFWFM JOUFSNFEJBSZ MBOHVBHF DBMMFE CZUFDPEF� 5IJT CZUFDPEF

JT TUPSFE JO �S\F нMFT BOE DBDIFE GPS FYFDVUJPO� *G ZPV SVO UIF TBNF

��

Page 63: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

8IZ $1ZUIPO *T 8SJUUFO JO $ BOE /PU 1ZUIPO

1ZUIPO BQQMJDBUJPO UXJDF XJUIPVU DIBOHJOH UIF TPVSDF DPEF JU XJMM CF

GBTUFS PO UIF TFDPOE FYFDVUJPO� 5IJT JT CFDBVTF JU MPBET UIF DPNQJMFE

CZUFDPEF JOTUFBE PG SFDPNQJMJOH FBDI UJNF�

8IZ $1ZUIPO *T 8SJUUFO JO $ BOE /PU

1ZUIPO

5IF $ JO $1ZUIPO JT B SFGFSFODF UP UIF $ QSPHSBNNJOH MBOHVBHF JN�

QMZJOH UIBU UIJT 1ZUIPO EJTUSJCVUJPO JT XSJUUFO JO UIF $ MBOHVBHF�

5IJT TUBUFNFOU JT NPTUMZ USVF� UIF DPNQJMFS JO $1ZUIPO JT XSJUUFO JO

QVSF $� )PXFWFS NBOZ PG UIF TUBOEBSE MJCSBSZ NPEVMFT BSF XSJUUFO

JO QVSF 1ZUIPO PS B DPNCJOBUJPO PG $ BOE 1ZUIPO�

4P8IZ *T UIF $1ZUIPO $PNQJMFS 8SJUUFO JO $

BOE /PU 1ZUIPO

5IF BOTXFS JT MPDBUFE JO IPX DPNQJMFST XPSL� 5IFSF BSF UXP UZQFT PG

DPNQJMFST�

�� 4FMG�IPTUFE DPNQJMFST BSF DPNQJMFST XSJUUFO JO UIF MBOHVBHF

UIFZ DPNQJMF TVDI BT UIF (P DPNQJMFS� 5IJT JT EPOF CZ B QSPDFTT

LOPXO BT CPPUTUSBQQJOH�

�� 4PVSDF�UP�TPVSDF DPNQJMFST BSF DPNQJMFST XSJUUFO JO BOPUIFS

MBOHVBHF UIBU BMSFBEZ IBT B DPNQJMFS�

*G ZPVυSF XSJUJOH B OFX QSPHSBNNJOH MBOHVBHF GSPN TDSBUDI ZPV

OFFE BO FYFDVUBCMF BQQMJDBUJPO UP DPNQJMF ZPVS DPNQJMFS� :PV OFFE B

DPNQJMFS UP FYFDVUF BOZUIJOH TP XIFO OFX MBOHVBHFT BSF EFWFMPQFE

UIFZυSF PGUFO XSJUUFO нSTU JO BO PMEFS NPSF FTUBCMJTIFE MBOHVBHF�

5IFSF BSF BMTP UPPMT BWBJMBCMF UIBU DBO UBLF B MBOHVBHF TQFDJнDBUJPO

BOE DSFBUF B QBSTFS UPQJDT ZPV XJMM DPWFS JO UIJT DIBQUFS� 1PQVMBS

DPNQJMFS�DPNQJMFST JODMVEF (/6 #JTPO :BDD BOE "/5-3�

��

Page 64: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

8IZ $1ZUIPO *T 8SJUUFO JO $ BOE /PU 1ZUIPO

4FF "MTP

*G ZPV XBOU UP MFBSO NPSF BCPVU QBSTFST DIFDL PVU UIF MBSL

QSPKFDU� -BSL JT B QBSTFS GPS DPOUFYU�GSFF HSBNNBS XSJUUFO JO

1ZUIPO�

"O FYDFMMFOU FYBNQMF PG DPNQJMFS CPPUTUSBQQJOH JT UIF (P QSPHSBN�

NJOH MBOHVBHF� 5IF нSTU (P DPNQJMFS XBT XSJUUFO JO $ UIFO PODF (P

DPVME CF DPNQJMFE UIF DPNQJMFS XBT SFXSJUUFO JO (P�

$1ZUIPO LFQU JUT $ IFSJUBHF� NBOZ PG UIF TUBOEBSE MJCSBSZ NPEVMFT

MJLF UIF VVO NPEVMF PS UIF VRFNHWV NPEVMF BSF XSJUUFO JO $ UP BDDFTT

MPX�MFWFM PQFSBUJOH TZTUFN "1*T� 5IF "1*T JO UIF8JOEPXT BOE -JOVY

LFSOFMT GPS DSFBUJOH OFUXPSL TPDLFUT XPSLJOH XJUI UIF нMFTZTUFN PS

JOUFSBDUJOH XJUI UIF EJTQMBZ BSF BMM XSJUUFO JO $�

*U NBEF TFOTF GPS 1ZUIPOυT FYUFOTJCJMJUZ MBZFS UP CF GPDVTFE PO UIF $

MBOHVBHF� -BUFS JO UIJT CPPL ZPV XJMM DPWFS UIF 1ZUIPO 4UBOEBSE -J�

CSBSZ BOE UIF $ NPEVMFT�

5IFSF JT B 1ZUIPO DPNQJMFS XSJUUFO JO 1ZUIPO DBMMFE 1Z1Z� 1Z1ZυT MPHP

JT BO 0VSPCPSPT UP SFQSFTFOU UIF TFMG�IPTUJOH OBUVSF PG UIF DPNQJMFS�

"OPUIFS FYBNQMF PG B DSPTT�DPNQJMFS GPS 1ZUIPO JT +ZUIPO� +ZUIPO

JT XSJUUFO JO +BWB BOE DPNQJMFT GSPN 1ZUIPO TPVSDF DPEF JOUP +BWB

CZUFDPEF� *O UIF TBNF XBZ UIBU $1ZUIPO NBLFT JU FBTZ UP JNQPSU $

MJCSBSJFT BOE VTF UIFN GSPN 1ZUIPO +ZUIPO NBLFT JU FBTZ UP JNQPSU

BOE SFGFSFODF +BWB NPEVMFT BOE DMBTTFT�

5IF нSTU TUFQ PG DSFBUJOH B DPNQJMFS JT UP EFнOF UIF MBOHVBHF� 'PS

FYBNQMF UIJT JT OPU WBMJE 1ZUIPO�

GHI P\BH[DPSOH�� �VWU! �

^

YRLG UHVXOW �

`

5IF DPNQJMFS OFFET TUSJDU SVMFT PG UIF HSBNNBUJDBM TUSVDUVSF GPS UIF

MBOHVBHF CFGPSF JU USJFT UP FYFDVUF JU�

��

Page 65: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IF 1ZUIPO -BOHVBHF 4QFDJнDBUJPO

/PUF

'PS UIF SFTU PG UIJT UVUPSJBM ��S\WKRQ XJMM SFGFS UP UIF DPNQJMFE

WFSTJPO PG $1ZUIPO� )PXFWFS UIF BDUVBM DPNNBOE XJMM EFQFOE

PO ZPVS 0QFSBUJOH 4ZTUFN�

'PS 8JOEPXT�

! S\WKRQ�H[H

'PS -JOVY�

� ��S\WKRQ

'PS NBD04�

� ��S\WKRQ�H[H

5IF 1ZUIPO -BOHVBHF 4QFDJрDBUJPO

$POUBJOFE XJUIJO UIF $1ZUIPO TPVSDF DPEF JT UIF EFнOJUJPO PG UIF

1ZUIPO MBOHVBHF� 5IJT EPDVNFOU JT UIF SFGFSFODF TQFDJнDBUJPO VTFE

CZ BMM UIF 1ZUIPO JOUFSQSFUFST�

5IF TQFDJнDBUJPO JT JO CPUI B IVNBO�SFBEBCMF BOE NBDIJOF�SFBEBCMF

GPSNBU� *OTJEF UIF EPDVNFOUBUJPO JT B EFUBJMFE FYQMBOBUJPO PG UIF

1ZUIPO MBOHVBHF� 8IBU JT BMMPXFE BOE IPX FBDI TUBUFNFOU TIPVME

CFIBWF�

-BOHVBHF %PDVNFOUBUJPO

-PDBUFE JOTJEF UIF 'RF UHIHUHQFH EJSFDUPSZ BSF SF4USVDUVSFE�

5FYU FYQMBOBUJPOT PG FBDI PG UIF GFBUVSFT JO UIF 1ZUIPO MBO�

HVBHF� 5IFTF нMFT GPSN UIF PпDJBM 1ZUIPO SFGFSFODF HVJEF BU

EPDT�QZUIPO�PSH���SFGFSFODF�

*OTJEF UIF EJSFDUPSZ BSF UIF нMFT ZPV OFFE UP VOEFSTUBOE UIF XIPMF

MBOHVBHF TUSVDUVSF BOE LFZXPSET�

��

Page 66: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IF 1ZUIPO -BOHVBHF 4QFDJнDBUJPO

cpython/Doc/reference

compound_stmts.rstdatamodel.rstexecutionmodel.rstexpressions.rstgrammar.rstimport.rstindex.rstintroduction.rstlexical_analysis.rstsimple_stmts.rsttoplevel_components.rst

Compound statements like if, while, for and function definitionsObjects, values and typesThe structure of Python programsThe elements of Python expressionsPython’s core grammar (referencing Grammar/Grammar)The import systemIndex for the language referenceIntroduction to the reference documentationLexical structure like lines, indentation, tokens and keywordsSimple statements like assert, import, return and yieldDescription of the ways to execute Python, like scripts and modules

"O &YBNQMF

*OTJEF 'RF UHIHUHQFH FRPSRXQGBVWPWV�UVW ZPV DBO TFF B TJNQMF FYBNQMF

EFнOJOH UIF ZLWK TUBUFNFOU�

5IF ZLWK TUBUFNFOU IBT NBOZ GPSNT UIF TJNQMFTU CFJOH UIF JOTUBOUJB�

UJPO PG B DPOUFYU�NBOBHFS BOE B OFTUFE CMPDL PG DPEF�

ZLWK [���

���

:PV DBO BTTJHO UIF SFTVMU UP B WBSJBCMF VTJOH UIF DV LFZXPSE�

ZLWK [�� DV \�

���

:PV DBO BMTP DIBJO DPOUFYU NBOBHFST UPHFUIFS XJUI B DPNNB�

ZLWK [�� DV \� ]�� DV MN�

���

5IF EPDVNFOUBUJPO DPOUBJOT UIF IVNBO�SFBEBCMF TQFDJнDBUJPO PG UIF

MBOHVBHF BOE UIFNBDIJOF�SFBEBCMF TQFDJнDBUJPO JT IPVTFE JO B TJOHMF

нMF *UDPPDU *UDPPDU�

��

Page 67: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IF 1ZUIPO -BOHVBHF 4QFDJнDBUJPO

5IF (SBNNBS 'JMF

*NQPSUBOU

5IJT TFDUJPO SFGFST UP UIF HSBNNBS нMF VTFE CZ UIF ψPME QBSTFSω�

"U UIF UJNF PG QVCMJTIJOH UIF ψOFX QBSTFSω UIF 1&( QBSTFS JT

FYQFSJNFOUBM BOE VOнOJTIFE�

'PS SFMFBTFT PG $1ZUIPOVQ UP BOE JODMVEJOH ��� UIF QHFO QBSTFS

JT UIF EFGBVMU� 'PS SFMFBTFT PG $1ZUIPO ��� BOE BCPWF UIF 1&(

QBSTFS JT UIF EFGBVMU� 5IF PME QBSTFS DBO CF FOBCMFE XJUI �;

ROGSDUVHU PO UIF DPNNBOE MJOF�

5IF 5PLFOT нMF JT VTFE CZ CPUI QBSTFST�

5IF (SBNNBS нMF JT XSJUUFO JO B DPOUFYU�OPUBUJPO DBMMFE #BDLVT�/BVS

'PSN #/'� #/' JT OPU TQFDJнD UP 1ZUIPO BOE JT PGUFO VTFE BT UIF

OPUBUJPO GPS HSBNNBS JO NBOZ PUIFS MBOHVBHFT�

5IF DPODFQU PG HSBNNBUJDBM TUSVDUVSF JO B QSPHSBNNJOH MBOHVBHF

JT JOTQJSFE CZ /PBN $IPNTLZυT XPSL PO 4ZOUBDUJD 4USVDUVSFT JO UIF

����T�

1ZUIPOυT HSBNNBS нMF VTFT UIF &YUFOEFE�#/' &#/' TQFDJнDBUJPO

XJUI SFHVMBS�FYQSFTTJPO TZOUBY� 4P JO UIF HSBNNBS нMF ZPV DBO VTF�

ύ GPS SFQFUJUJPO

ύ � GPS BU�MFBTU�PODF SFQFUJUJPO

ύ >@ GPS PQUJPOBM QBSUT

ύ _ GPS BMUFSOBUJWFT

ύ �� GPS HSPVQJOH

"T BO FYBNQMF UIJOL BCPVU IPX ZPV XPVME EFнOF B DVQ PG DPмFF�

ύ *U NVTU IBWF B DVQ

ύ *U NVTU JODMVEF BU MFBTU POF TIPU PG FTQSFTTP BOE DBO DPOUBJO NVM�

UJQMF

��

Page 68: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IF 1ZUIPO -BOHVBHF 4QFDJнDBUJPO

ύ *U DBO IBWF NJML CVU JU JT PQUJPOBM

ύ 5IFSF BSF NBOZ UZQFT PG NJML ZPV DBO QVU JOUP DPмFF MJLF GVMM GBU

TLJNNFE BOE TPZ

%FнOFE JO &#/' B DPмFF PSEFS DPVME MPPL MJLF UIJT�

FRIIHH� FXS �HVSUHVVR�� >ZDWHU@ >PLON@

PLON� IXOO�IDW _ VNLPPHG _ VR\

*O UIJT DIBQUFS HSBNNBS JT WJTVBMJ[FE XJUI SBJMSPBE EJBHSBNT� 5IJT

EJBHSBN JT UIF SBJMSPBE EJBHSBN GPS UIF DPмFF TUBUFNFOU�

cup espresso

<water full-fat

skimmed

soy

*O B SBJMSPBE EJBHSBN FBDI QPTTJCMF DPNCJOBUJPO NVTU HP JO B MJOF

GSPN MFGU UP SJHIU� 0QUJPOBM TUBUFNFOUT DBO CF CZQBTTFE BOE TPNF

TUBUFNFOUT DBO CF GPSNFE BT MPPQT�

*G ZPV TFBSDI GPS ZLWKBVWPW JO UIF HSBNNBS нMF ZPV DBO TFF UIF EFнOJ�

UJPO�

ZLWKBVWPW� ZLWK ZLWKBLWHP �� ZLWKBLWHP� � VXLWH

ZLWKBLWHP� WHVW >DV H[SU@

"OZUIJOH JO RVPUFT JT B TUSJOH MJUFSBM LOPXO BT B UFSNJOBM� 5FSNJOBMT

BSF IPX LFZXPSET BSF SFDPHOJ[FE� 5IF ZLWKBVWPW JT TQFDJнFE BT�

�� 4UBSUJOH XJUI UIF XPSE ZLWK

�� 'PMMPXFE CZ B ZLWKBLWHP XIJDI JT B WHVW BOE PQUJPOBMMZ UIF XPSE

DV BOE BO FYQSFTTJPO

�� 'PMMPXJOH POF PS NBOZ ZLWKBLWHP FBDI TFQBSBUFE CZ B DPNNB

��

Page 69: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IF 1ZUIPO -BOHVBHF 4QFDJнDBUJPO

�� &OEJOH XJUI B �

�� 'PMMPXFE CZ B VXLWH

5IFSF BSF SFGFSFODFT UP UISFF PUIFS EFнOJUJPOT JO UIFTF UXP MJOFT�

ύ VXLWH SFGFST UP B CMPDL PG DPEF XJUI POF PS NVMUJQMF TUBUFNFOUT

ύ WHVW SFGFST UP B TJNQMF TUBUFNFOU UIBU JT FWBMVBUFE

ύ H[SU SFGFST UP B TJNQMF FYQSFTTJPO

7JTVBMJ[FE JO B 3BJMSPBE %JBHSBN UIF ZLWK TUBUFNFOU MPPLT MJLF UIJT�

withwith test as expr , test as expr

<: suite

"T B NPSF DPNQMFY FYBNQMF UIF WU\ TUBUFNFOU JT EFнOFE BT�

WU\BVWPW� �WU\ � VXLWH

��H[FHSWBFODXVH � VXLWH��

>HOVH � VXLWH@

>ILQDOO\ � VXLWH@ _

ILQDOO\ � VXLWH��

H[FHSWBFODXVH� H[FHSW >WHVW >DV 1$0(@@

5IFSF BSF UXP VTFT PG UIF USZ TUBUFNFOU�

�� WU\ XJUI POF PS NBOZ H[FHSW DMBVTFT GPMMPXFE CZ BO PQUJPOBM HOVH

UIFO BO PQUJPOBM ILQDOO\

�� WU\ XJUI POMZ B ILQDOO\ TUBUFNFOU

0S WJTVBMJ[FE JO B 3BJMSPBE %JBHSBN�

trytry : suite except test as NAME : suite

<else : suite finally : suite

finally : suite

��

Page 70: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

6TJOH UIF 1BSTFS (FOFSBUPS

5IF WU\ TUBUFNFOU JT B HPPE FYBNQMF PG B NPSF DPNQMFY TUSVDUVSF�

*G ZPV XBOU UP VOEFSTUBOE UIF 1ZUIPO MBOHVBHF JO EFUBJM UIF HSBNNBS

JT EFнOFE JO *UDPPDU *UDPPDU�

6TJOH UIF 1BSTFS (FOFSBUPS

5IF HSBNNBS нMF JUTFMG JT OFWFS VTFE CZ UIF 1ZUIPO DPNQJMFS� *OTUFBE

B QBSTFS UBCMF JT DSFBUFE CZ B QBSTFS HFOFSBUPS� *G ZPVNBLF DIBOHFT UP

UIF HSBNNBS нMF ZPVNVTU SFHFOFSBUF UIF QBSTFS UBCMF BOE SFDPNQJMF

$1ZUIPO�

1BSTFS 5BCMFT BSF B MJTU PG QPUFOUJBM QBSTFS TUBUFT� 8IFO QBSTF USFFT

CFDPNF DPNQMFY UIFZ FOTVSF UIBU HSBNNBS DBOOPU CF BNCJHVPVT�

5IF 1BSTFS (FOFSBUPS

" QBSTFS HFOFSBUPS XPSLT CZ DPOWFSUJOH UIF &#/' TUBUFNFOUT JOUP B

/PO�EFUFSNJOJTUJD 'JOJUF "VUPNBUPO /'"� 5IF/'" TUBUFT BOE USBO�

TJUJPOT BSF SFTPMWFE BOE DPOTPMJEBUFE JOUP B %FUFSNJOJTUJD 'JOJUF "V�

UPNBUPO %'"�

5IF%'"T BSF VTFE CZ UIF QBSTFS BT QBSTJOH UBCMFT� 5IJT UFDIOJRVFXBT

GPSNFE BU 4UBOGPSE 6OJWFSTJUZ BOE EFWFMPQFE JO UIF ����T KVTU CFGPSF

UIF BEWFOU PG 1ZUIPO� $1ZUIPOυT QBSTFS HFOFSBUPS SJHQ JT VOJRVF UP

UIF $1ZUIPO QSPKFDU�

5IF SJHQ BQQMJDBUJPO JT XBT SFXSJUUFO JO 1ZUIPO ��� GSPN $ UP 1ZUIPO

BT 3DUVHU SJHQ SJHQ�S\�

*U JT FYFDVUFE BT �

� ��S\WKRQ �P 3DUVHU�SJHQ >JUDPPDU@ >WRNHQV@ >JUDPLQLW�K@ >JUDPLQLW�F@

*U JT OPSNBMMZ FYFDVUFE GSPN UIF CVJME TDSJQUT OPU EJSFDUMZ�

5IF %'" BOE /'" EPOυU IBWF B WJTVBM PVUQVU CVU UIFSF JT B CSBODI PG

$1ZUIPO XJUI B EJSFDUFE HSBQI PVUQVU� GHFRUDWRU HSBNNBS JT EFнOFE

��

Page 71: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

3FHFOFSBUJOH (SBNNBS

JO *UDPPDU�*UDPPDU BT�

GHFRUDWRU� # GRWWHGBQDPH > � >DUJOLVW@ � @ 1(:/,1(

5IF QBSTFS HFOFSBUPS DSFBUFT B DPNQMFY /'" HSBQI PG �� TUBUFT� &BDI

PG UIF TUBUFT JT OVNFSJDBMMZ SFQSFTFOUFE XJUI IJOUT PO UIFJS OBNF JO

UIF HSBNNBS� 5IF USBOTJUJPOT BSF SFGFSSFE UP BT τBSDT�υ

5IF %'" JT TJNQMFS UIBO UIF /'" XJUI UIF QBUIT SFEVDFE�

5IF /'" BOE %'" HSBQIT BSF POMZ VTFGVM GPS EFCVHHJOH UIF EFTJHO PG

DPNQMFY HSBNNBST�

8F XJMM VTF 3BJMSPBE %JBHSBNT GPS SFQSFTFOUJOH HSBNNBS JOTUFBE PG

%'" PS /'" HSBQIT�

"T BO FYBNQMF UIJT EJBHSBN SFQSFTFOUT UIF QBUIT UIBU DBO CF UBLFO

GPS UIF GHFRUDWRU TUBUFNFOU�

@ dotted_name ( arglist ) NEWLINE

3FHFOFSBUJOH (SBNNBS

5P TFF SJHQ JO BDUJPO MFUυT DIBOHF QBSU PG UIF 1ZUIPO HSBNNBS� 4FBSDI

*UDPPDU *UDPPDU GPS SDVVBVWPW UP TFF UIF EFнOJUJPO PG B SDVV TUBUFNFOU�

SDVVBVWPW� SDVV

��

Page 72: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

3FHFOFSBUJOH (SBNNBS

pass

$IBOHF UIBU MJOF UP BDDFQU UIF UFSNJOBM LFZXPSE SDVV PS SURFHHG

BT LFZXPSET CZ BEEJOH B DIPJDF _ BOE UIF SURFHHG MJUFSBM�

SDVVBVWPW� SDVV _ SURFHHG

pass

proceed

/FYU SFCVJME UIF HSBNNBS нMFT CZ SVOOJOH SJHQ� $1ZUIPO DPNFT XJUI

TDSJQUT UP BVUPNBUF SJHQ�

0O NBD04 BOE -JOVY SVO UIF PDNH UHJHQ�JUDPPDU UBSHFU�

� PDNH UHJHQ�JUDPPDU

'PS8JOEPXT CSJOH VQ B DPNNBOE MJOF GSPN UIF 3&%XLOG EJSFDUPSZ BOE

SVO EXLOG�EDW XJUI UIF ��UHJHQ GMBH�

! EXLOG�EDW ��UHJHQ

:PV TIPVME TFF BO PVUQVU TIPXJOH UIBU UIF OFX ,QFOXGH JUDPLQLW�K BOE

3\WKRQ JUDPLQLW�F нMFT IBWF CFFO SFHFOFSBUFE�

8JUI UIF SFHFOFSBUFE QBSTFS UBCMFT XIFO ZPV SFDPNQJMF $1ZUIPO JU

XJMM VTF UIF OFX TZOUBY� 6TF UIF TBNF DPNQJMBUJPO TUFQT ZPV VTFE JO

UIF MBTU DIBQUFS GPS ZPVS PQFSBUJOH TZTUFN�

*G UIF DPEF DPNQJMFE TVDDFTTGVMMZ ZPV DBO FYFDVUF ZPVS OFX $1ZUIPO

CJOBSZ BOE TUBSU B 3&1-�

��

Page 73: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

3FHFOFSBUJOH (SBNNBS

*O UIF 3&1- ZPV DBO OPX USZ EFнOJOH B GVODUJPO� *OTUFBE PG VTJOH UIF

SDVV TUBUFNFOU VTF UIF SURFHHG LFZXPSE BMUFSOBUJWF UIBU ZPV DPNQJMFE

JOUP UIF 1ZUIPO HSBNNBS�

� ��S\WKRQ �; ROGSDUVHU

3\WKRQ �����E� �WDJV�Y�����E����IH�FI� 0D\ �� ����� ���������

>&ODQJ ������ �FODQJ�������������@ RQ GDUZLQ

7\SH �KHOS�� �FRS\ULJKW�� �FUHGLWV� RU �OLFHQVH� IRU PRUH LQIRUPDWLRQ�

!!! GHI H[DPSOH���

��� SURFHHG

���

!!! H[DPSOH��

$POHSBUVMBUJPOT ZPVυWF DIBOHFE UIF $1ZUIPO TZOUBY BOE DPNQJMFE

ZPVS PXO WFSTJPO PG $1ZUIPO�

/FYU XFυMM FYQMPSF UPLFOT BOE UIFJS SFMBUJPOTIJQ UP HSBNNBS�

5PLFOT

"MPOHTJEF UIF HSBNNBS нMF JO UIF *UDPPDU GPMEFS JT UIF *UDPPDU 7RNHQV

нMF XIJDI DPOUBJOT FBDI PG UIF VOJRVF UZQFT GPVOE BT MFBG OPEFT JO B

QBSTF USFF� &BDI UPLFO BMTP IBT B OBNF BOE B HFOFSBUFE VOJRVF *%�

5IF OBNFT BSF VTFE UP NBLF JU TJNQMFS UP SFGFS UP JO UIF UPLFOJ[FS�

/PUF

5IF *UDPPDU 7RNHQV нMF JT B OFX GFBUVSF JO 1ZUIPO ����

'PS FYBNQMF UIF MFGU QBSFOUIFTJT JT DBMMFE /3$5 BOE TFNJDPMPOT BSF

DBMMFE 6(0,� :PVυMM TFF UIFTF UPLFOT MBUFS JO UIF CPPL�

/3$5 �

53$5 �

/64% >

564% @

&2/21 �

��

Page 74: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

3FHFOFSBUJOH (SBNNBS

&200$ �

6(0, �

"T XJUI UIF *UDPPDU нMF JG ZPV DIBOHF UIF *UDPPDU 7RNHQV нMF ZPV OFFE

UP SFSVO SJHQ�

5P TFF UPLFOT JO BDUJPO ZPV DBO VTF UIF WRNHQL]H NPEVMF JO $1ZUIPO�

/PUF

5IFSF BSF UXP UPLFOJ[FST JO UIF $1ZUIPO TPVSDF DPEF� 0OF UPL�

FOJ[FS XSJUUFO JO 1ZUIPO EFNPOTUSBUFE IFSF BOE BOPUIFS XSJU�

UFO JO $� 5IF UPLFOJ[FS XSJUUFO JO 1ZUIPO JT B VUJMJUZ BOE UIF

1ZUIPO JOUFSQSFUFS VTFT UIF POF XSJUUFO JO $� 5IFZ IBWF JEFOUJ�

DBM PVUQVU BOE CFIBWJPS� 5IF WFSTJPO XSJUUFO JO $ JT EFTJHOFE

GPS QFSGPSNBODF BOE UIF NPEVMF JO 1ZUIPO JT EFTJHOFE GPS EF�

CVHHJOH�

$SFBUF B TJNQMF 1ZUIPO TDSJQU DBMMFE WHVWBWRNHQV�S\�

FS\WKRQ�ERRN�VDPSOHV �� WHVWBWRNHQV�S\

� 'HPR DSSOLFDWLRQ

GHI P\BIXQFWLRQ���

SURFHHG

*OQVU UIF WHVWBWRNHQV�S\ нMF UP BNPEVMF CVJMU JOUP UIF TUBOEBSE MJCSBSZ

DBMMFE WRNHQL]H� :PV XJMM TFF UIF MJTU PG UPLFOT CZ MJOF BOE DIBSBDUFS�

6TF UIF �H GMBH UP PVUQVU UIF FYBDU UPLFO OBNF�

� ��S\WKRQ �P WRNHQL]H �H WHVWBWRNHQV�S\

�������� (1&2',1* XWI��

��������� &200(17 � 'HPR DSSOLFDWLRQ

���������� 1/ ?Q

�������� 1$0( GHI

��������� 1$0( P\BIXQFWLRQ

���������� /3$5 �

��

Page 75: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

3FHFOFSBUJOH (SBNNBS

���������� 53$5 �

���������� &2/21 �

���������� 1(:/,1( ?Q

�������� ,1'(17

�������� 1$0( SURFHHG

�������� 1(:/,1( ?Q

�������� '('(17

�������� (1'0$5.(5

*O UIF PVUQVU UIF нSTU DPMVNO JT UIF SBOHF PG UIF MJOF�DPMVNO DPPS�

EJOBUFT UIF TFDPOE DPMVNO JT UIF OBNF PG UIF UPLFO BOE UIF нOBM

DPMVNO JT UIF WBMVF PG UIF UPLFO�

*O UIF PVUQVU UIF WRNHQL]H NPEVMF IBT JNQMJFE TPNF UPLFOT�

ύ 5IF (1&2',1* UPLFO GPS XWI��

ύ " CMBOL MJOF BU UIF FOE

ύ " '('(17 UP DMPTF UIF GVODUJPO EFDMBSBUJPO

ύ "O (1'0$5.(5 UP FOE UIF нMF

*U JT CFTU QSBDUJDF UP IBWF B CMBOL MJOF BU UIF FOE PG ZPVS 1ZUIPO TPVSDF

нMFT� *G ZPV PNJU JU $1ZUIPO BEET JU GPS ZPV�

5IF WRNHQL]H NPEVMF JT XSJUUFO JO QVSF 1ZUIPO BOE JT MPDBUFE JO /LE

WRNHQL]H�S\�

5P TFF B WFSCPTF SFBEPVU PG UIF $ UPLFOJ[FS ZPV DBO SVO 1ZUIPO XJUI

UIF �G GMBH� 6TJOH UIF WHVWBWRNHQV�S\ TDSJQU ZPV DSFBUFE FBSMJFS SVO JU

XJUI UIF GPMMPXJOH�

� ��S\WKRQ �G WHVWBWRNHQV�S\

7RNHQ 1$0(�GHI ��� ,WV D NH\ZRUG

')$ ILOHBLQSXW� VWDWH �� 3XVK VWPW

')$ VWPW� VWDWH �� 3XVK FRPSRXQGBVWPW

���

7RNHQ 1(:/,1(� ��� ,WV D WRNHQ ZH NQRZ

��

Page 76: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

" .PSF $PNQMFY &YBNQMF

')$ IXQFGHI� VWDWH �� >VZLWFK IXQFBERG\BVXLWH WR VXLWH@ 3XVK VXLWH

')$ VXLWH� VWDWH �� 6KLIW�

7RNHQ ,1'(17� ��� ,WV D WRNHQ ZH NQRZ

')$ VXLWH� VWDWH �� 6KLIW�

7RNHQ 1$0(�SURFHHG ��� ,WV D NH\ZRUG

')$ VXLWH� VWDWH �� 3XVK VWPW

���

$&&(37�

*O UIF PVUQVU ZPV DBO TFF UIBU JU IJHIMJHIUFE SURFHHG BT B LFZXPSE� *O

UIF OFYU DIBQUFS XFυMM TFF IPX FYFDVUJOH UIF 1ZUIPO CJOBSZ HFUT UP UIF

UPLFOJ[FS BOE XIBU IBQQFOT GSPN UIFSF UP FYFDVUF ZPVS DPEF�

/PUF

5P DMFBO VQ ZPVS DPEF SFWFSU UIF DIBOHF JO *UDPPDU *UDPPDU SF�

HFOFSBUF UIF HSBNNBS BHBJO UIFO DMFBO UIF CVJME BOE SFDPN�

QJMF�

'PS NBD04 PS -JOVY�

� JLW FKHFNRXW �� *UDPPDU�*UDPPDU

� PDNH UHJHQ�JUDPPDU

� PDNH FOREEHU

� PDNH �M� �V

0S GPS 8JOEPXT�

! JLW FKHFNRXW �� *UDPPDU�*UDPPDU

! EXLOG�EDW ��UHJHQ

! EXLOG�EDW �W &OHDQ$OO

! EXLOG�EDW �W %XLOG

".PSF $PNQMFY &YBNQMF

"EEJOH SURFHHG BT BO BMUFSOBUF LFZXPSE GPS SDVV JT B TJNQMF DIBOHF UIF

QBSTFS HFOFSBUPS EPFT UIF XPSL PG NBUDIJOH SURFHHG BT B MJUFSBM GPS

UIF SDVVBVWPW UPLFO� 5IJT OFX LFZXPSE XPSLT XJUIPVU BOZ DIBOHFT UP

��

Page 77: CPython Internals: Your Guide to the Python 3 Interpreter · 'psfxpse È"qsphsbnnjohmbohvbhfdsfbufeczbdpnnvojuzgpt ufstibqqjofttjojutvtfstbspvoeuifxpsme É Á(vjepwbo3pttvn,joh Åt%bz4qffdi

5IJT JT B TBNQMF GSPN ω$1ZUIPO *OUFSOBMT� :PVS

(VJEF UP UIF 1ZUIPO � *OUFSQSFUFSϊ

8JUI UIJT CPPL ZPVυMM DPWFS UIF DSJUJDBM DPODFQUT CFIJOE UIF JOUFSOBMT PG

$1ZUIPO BOE IPX UIFZ XPSL XJUI WJTVBM FYQMBOBUJPOT BT ZPV HP BMPOH�

:PVυMM VOEFSTUBOE UIF DPODFQUT JEFBT BOE UFDIOJDBMJUJFT PG $1ZUIPO JO

BO BQQSPBDIBCMF BOE IBOET�PO GBTIJPO� "U UIF FOE PG UIF CPPL ZPVυMM

CF BCMF UP�

ύ 8SJUF DVTUPN FYUFOTJPOT GPS 1ZUIPO XSJUUFO JO UIF $ QSPHSBN�

NJOH MBOHVBHF UIF CPPL JODMVEFT BO ψ*OUSP UP $ GPS 1ZUIPOJTUBTω

DIBQUFS

ύ 6TF ZPVS EFFQ LOPXMFEHF PG UIF $1ZUIPO JOUFSQSFUFS UP JNQSPWF

ZPVS PXO 1ZUIPO BQQMJDBUJPOT

ύ $POUSJCVUF UP UIF $1ZUIPO QSPKFDU BOE TUBSU ZPVS KPVSOFZ UPXBSET

CFDPNJOH B 1ZUIPO $PSF %FWFMPQFS

*G ZPV FOKPZFE UIF TBNQMF DIBQUFST ZPV DBO QVSDIBTF B GVMM

WFSTJPO PG UIF CPPL BU SFBMQZUIPO�DPN�DQZUIPO�JOUFSOBMT