42
!"#$%& ()*+, -./#012 314$.&5 6 70.858 #%0/ !5#5/ 9/:75/ 6;/.2 )<<=

A presentation about the internals of the Python Virtual ... · PDF filepython -m python f.py python !"E0&m>.G;25H.25JSH217F(,

Embed Size (px)

Citation preview

!"#$%&'()*+,'-./#012'314$.&5'

6'70.858'#%0/'

!5#5/'9/:75/'

6;/.2')<<='

!"#$%&'

•! >#1/#58'?54'@A=A'B"'C0.8%'D1&'E%FF0G'

–!H./F#';0B2.4'/5251F5'H5B'@AA@'%&'I>JKJ9'

–!L&#5&858'1F'F4/.;M&7'21&70175'N%/'6G%5B1'

–!O5&5D%25&#'?.4#1#%/'H%/'P.N5'(O?HP,'

•! C%%725Q'R%;5Q'!2%&5Q'!.S1/Q'31.2G1&Q'

O.#9%//5&#Q'T1$%%Q'K6>6Q'U'

•! !"#$%&'J&$1&45G5&#'!/%;%F12'(!J!,'

•! H/55'F%VW1/5Q'X!1F412'%N'#$5')<<<FX'

O5&5Y#F'

•! Z%GB.&1M%&'%N'7%%8'.851F'N/%G'%#$5/'

21&70175F'['ZQ'Z\\Q'3%8021Q'6OZQ'L4%&Q'U'

•! L&#5/;/5#5/'1;;/%14$Q'&%'5S;2.4.#'#";.&7Q'

G5G%/"'G1&175G5&#Q'Y/F#]421FF'%B^54#'

G%852Q';%/#1B.2.#"'%N'F%0/45'1&8'B"#5'4%85Q''

.&]B0.28'G%8025'8%40G5&#1M%&'

•! XO1_5/.5F'.&420858X'

–!!21`%/G]&50#/12'F"F#5G'4122FQ'B0.2#].&'F#1&81/8'

2.B/1/"'(&5#W%/aQ'Y25FQ'CILQ'81#1B1F5FQ'U,'

•! L&#5/14MD5'G%85'DF*'F4/.;#'G%85'

!"#$%&'P1&70175'

•!351&W$.25'N%40F'%&'F#1B.2.#"'%N'21&70175'

•! J-JET9bLKC'.F'1&'%B^54#'

–!-1/.1B25FQ'4%&F#1&#FQ'#";5FQ'N0&4M%&FQ'U'

•! J-JET9bLKC'$1F'1'&1G5F;145'

•! J-JET9bLKC'41&'B5';/.&#58'1&8'.&#/%F;54#58'

•! ?"&1G.4'#";.&7Q'F#1M4'F4%;.&7'

•! !%W5/N02'B0.2#].&'81#1'#";5Fc'F#/.&7FQ'&0G5/.412'

#";5FQ'2.F#FQ'8.4M%&1/.5FQ'B%%251&Q'U'

•! >;54.12M5Fc'>>>, self, global, ….

!"#$%&'P1&70175']'>#/04#0/5'

•! ?5Y&.M%&F'1&8'F#1#5G5&#F'41&'B5'4%GB.&58'

#%'1&'.G;%/#1B25'!"#$%&'

–!?%_58'G%8025'&1G5F'N%/'()*+),&'4%&45;#'

–!LG;%/#'#5F#'d'H/%G'#5F#'.G;%/#'S'd'H/%G'#5F#'

.G;%/#'e'd'LG;%/#'#5F#'1F'#$595F#'

•! L&85&#1M%&'#%'F$%W'B2%4a'F#/04#0/5'

•! Z21FF5F'

–!def [methodName] (self, …):

–!Z%&F#/04#%/'85&%#58'B"'__init__'G5#$%8'

–!global'F#1#5G5&#''

!"#$%&'P1&70175'

•! Z%&#/%2'F#/04#0/5F'(if, while, ...,'

–!Z%2254M%&'.#5/1#%/'(for,'

–!try: … / except: …'F#1#5G5&#F'

•! K%'FW.#4$'F#1#5G5&#'

–!L&F#518'0F5'%N'if…elif…elif…else

–!>55'!J!f@<f'N%/'.&]85;#$'8.F40FF.%&'

!"#$%&'P1&70175']'Z%2254M%&F'

•! >#/.&7Q'2.F#FQ'1&8'#0;25F'1/5'-&.$&/*&-'

•! P.F#F'['?"&1G.4'1//1"F'(.&85S.&7Q'F0B]/1&75F,'

–!>.G.21/'#%'!1F412'1//1"F'

–!30#1B25'4%2254M%&'%N'81#1'%N'#$5'F1G5'#";5'

•! 90;25F'['2.7$#]W5.7$#Q'.GG0#1B25'2.F#F'

–!>.G.21/'#%'!1F412'/54%/8F'%/'Z'F#/04#F'

–!LGG0#1B25'4%2254M%&'%N'81#1'%N'8.g5/5&#'#";5'

•! ?.4M%&1/.5F'['6FF%4.1MD5'1//1"F'

–!h5"F'G0F#'B5'.GG0#1B25'

!"#$%&'P1&70175']'Z%2254M%&F'

•! Z%2254M%&'.#5/1#%/'for item in coll:

–!?.4M%&1/"Q'H.25'1&8'>#/.&7'1/5'.#5/1#%/F'

•! >2.4.&7'

•! K5FM&7'

•! >.&725].#5G'#0;25'

!"#$%&'P1&70175']'68D1&458'

•! C5&5/1#%/'N0&4M%&'['/5#0/&F'1&'.#5/1#%/''

–!def generateItems(seq):

for item in seq: yield 'item: %s' % item

•! P.F#'4%G;/5$5&F.%&'

•! 9$5/5'.F'F%G5'G%/5'U''(!"#$%&'@<@Q'B%%aF,'

E0&&.&7'!"#$%&'4%85'

•! L&#5/;/5#5/'DF*'Z%G;.25/'8.F40FF.%&'

•! >%0/45'4%85'.F'4%G;.258'#%'F%G5'a.&8'%N'B"#5'

4%85'1&8'5S540#58'B"'1'D./#012'G14$.&5'

–!Z!"#$%&c'>%0/45'4%85']i'!"#$%&'B"#5'4%85'

•!-3'W/._5&'.&'ZQ'F#1&81/8'.G;25G5&#1M%&'

–!j"#$%&c'>%0/45'4%85']i'j1D1'B"#5'4%85'

•! j-3'1F'/0&MG5'5&D./%&G5&#'

–!L/%&!"#$%&c'>%0/45'4%85']i'LP'(k*KJ9X,'B"#5'4%85'

•! (k*KJ9X,'ZPE'1F'/0&MG5'5&D./%&G5&#'

•! !"!"c'E0&MG5'5&D./%&G5&#'W/._5&'.&'!"#$%&'

>#1/M&7'Z!"#$%&'G1.&(,''''0"#$%&-1(234"/5*' l.&31.&(,''''67189/0)9/5*'

!"m31.&(,'''0"#$%&-10)9/5*'

!"mL&.M12.n5(,''''6234"/1(234"/:$/5*'

!">"Fm>5#6/7D(,'''6234"/1-2-!"#$%&5*'

!"E0&m>.G;25>#/.&7H217F(,'

6234"/1(234"/:$/5*'

E0&3%8025(,'''0"#$%&-10)9/5*'

!"E0&m6&"H.25JSH217F(,'

6234"/1(234"/:$/5*'

!"E0&mL&#5/14MD5P%%;H217F(,'

!"E0&mL&#5/14MD5o&5H217F(,'

python -c

python -m

python f.py python

!"E0&m>.G;25H.25JSH217F(,'

U'

!"E0&mH.25JSH217F(,'

U'!"!1/F5/m6>9H/%GH.25(,'

/0&m;"4mY25(,'

Z!"#$%&'Z%G;.25/'p'L&#5/;/5#5/'

85N'N(,c'

'''''1QBqBQ1'

''''';/.&#'rb522%k'

Source code

(foo.py)

Z6PPmHIKZ9LoK'

!o!m9o!'

Eo9m9lo'

!ELK9mL9J3'

***'

Python byte code

Z%G;.25/'

L&#5/;/5#5/'

62;<=&*3>'-3)*+'

Abstract

Syntax Tree

iii';/.&#'rb522%k'

Interactive mode

sftA)=@stA+u

<=A+u)<Af=t+

uA)f=@)A=AsA'

foo.pyc

Z!"#$%&')*+'

•! !1/F5/'#/1&FN%/GF''#$5'F#/.&7F'%N'#%a5&F'.&#%'1'

4%&4/5#5'F"&#1S'#/55'(JZ>9,'

–!P5S5/'1&8'PP(@,';1/F5/'

•! 9/1&FN%/G5/';14a175'#$5&'#/1&F21#5F'#$.F'.&#%'1'

G%/5'75&0.&5'6>9'(compiler.transformer,'

•! L&;0#'#%'B"#5'4%85'4%G;.25/'.&'compile.c'

–!O"#5'4%85'.F'75&5/1#58'B"';1/F.&7'#$.F'6>9'

–!-.F.#%/';1_5/&'122%WF'$%%a.&7'.&'%;MG.n1M%&F'

•! Z%G;.21M%&'/5F02#'N%/'.G;%/#58'4%85''

(&%#'#%;]25D52'Y25,'.F'F#%/58'.&'.pyc Y25'

!"#$%&'6>9'(!"#$%&*1F82,'

•! E5;/5F5&#1M%&'%N'#$5';/%7/1G'W.#$%0#'4%85'

•! 6F'0F012Q'5D5/"'&%85'.&'#$5'6>9'/5;/5F5&#F'1'

F"&#14M4'4%&F#/04#'

–!9/55'/%%#'.F'#$5'Module'%B^54#'

–!>#1#5G5&#F'(LNQ'l$.25Q'l.#$Q'!/.&#Q'Z21FFQ'C2%B12Q'

E5#0/&Q'E1.F5Q'LG;%/#Q'JS54Q'U,'

–!JS;/5FF.%&F'(O.&o;Q'?.4#Q'T.528Q'>#/Q'U,'

–!>;54.12.n58'#";5F'(5S45;#$1&825/Q'12.1FQ'F2.45Q'U,'

!"#$%&'-3'

•! -./#012'G14$.&5';1/#'%N'.&#5/;/5#5/'5S540#5F'

!"#$%&'B"#5'4%85'

–!>.G;25'F#14a'G14$.&5'

–!PyObject*'F#14a'['B"#5'4%85F'%;5/1#5'%&'%B^54#F'

•!>#14a'N/1G5F'1/5'122%41#58'%&'#$5'$51;'

–!Z'F#14a'N/1G5F';%.&#'#%'$51;'F#14a'N/1G5F'

•! >%G5'$.7$]25D52'B"#5'4%85F'(X!ELK9X,'

•! -3'a&%WF'&51/2"'&%#$.&7'1B%0#'Z'

/5;/5F5&#1M%&'%N'F;54.Y4'!"#$%&'#";5F'

•! !"#$%&'%B^54#F'a&%W'&%#$.&7'1B%0#'#$5'-3'

oB^54#F'.&'#$5'E0&MG5'•! JD5/"'!"#$%&'%B^54#'.&F#1&45'$1F'1'4%//5F;%&8.&7'

Z'#";5'.&F#1&45'

–!JD5&'B1F.4'#";5F'1/5'122%41#58'%&'#$5'$51;'

–!622'Z'#";5F'4%&#1.&'PyObject_HEAD'F#/04#'G5GB5/F'(5*7*'F55'intobject.h / object.h,'

–!E0&MG5'41&'#$5/5N%/5'#/51#'5D5/"'!"#$%&'%B^54#'1F'

D1/.1B25'%N'#$5'#";5'PyObject*

–!PyObject_HEAD 4%&#1.&F'&0GB5/'%N'/5N5/5&45F'

%&'#$5'%B^54#'(ob->ob_refcnt)

•! Z'G%8025F'&558'#%'0F5'Py_INCREF(obj)'1&8'

N/.5&8F

oB^54#F'.&'#$5'E0&MG5'

•! ob_type'G5GB5/'%N'PyObject_HEAD $%28F';%.&#5/'#%'PyTypeObject'F#/04#'

–!?5#5/G.&5F'Z'N0&4M%&F'#%'4122'%&'14MD.M5F'W.#$'

#$1#'%B^54#'['32(&'!&34"#-'

–!>%G5'%;5/1M%&F'1/5'&%#'N51F.B25'N%/'F%G5'#";5F'

PyTypeObject PyInt_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "int",

sizeof(PyIntObject), 0, (destructor)int_dealloc, /* tp_dealloc */ (printfunc)int_print, /* tp_print */ 0, /* tp_getattr */

0, /* tp_setattr */ (cmpfunc)int_compare, /* tp_compare */ …

L&#5/;/5#5/'P%%;'(45D12*4,'

•! O.7'FW.#4$'F#1#5G5&#Q'W%/a.&7'%&'1&'.&4%G.&7'

PyFrameObject*'F#/04#0/5'

–!31&"'%;4%85'.G;25G5&#1M%&F'4122'Z'$52;5/'

N0&4M%&F'(F55'PyEval_EvalFrameEx)'

•! H%/'5D5/"'B"#5'4%85'.&F#/04M%&Q'G1&175G5&#'

%N'/5N5/5&45'4%0&M&7'&55858'

•! H5W'B"#5'4%85';/58.4M%&'G54$1&.FG'

–!J*7*c'7;06?@AB;6'%V5&'N%22%W58'B"'CD06BEFB>'

–!>0445FFN02'.&#5/;/5#5/';/58.4M%&'G.7$#'2518'#%'

F0445FFN02';/%45FF%/'B/1&4$';/58.4M%&'

H/1G5'oB^54#F'

•! PyFrameObject']'1/70G5&#'N%/'.&#5/;/5#5/'

•! Z%&#1.&F'41225/'N/1G5Q'4%85Q'D1/.1B25FQ'1&8'/5#0/&'188/5FF'

•! JS540#58'B"'#$5'.&#5/;/5#5/'2%%;'

•! E5;/5F5&#F'1&'1&%&"G%0F'*"#&'"<=&*3'9/'&G&*$H"/'

–!H0&4M%&'4122F'1/5'G1;;58'#%'N/1G5F'

–!!1/1G5#5/F'%N'N0&4M%&'4122F'1/5'G1;;58'#%'2%412'

D1/.1B25F'.&'1'N/1G5'

–!H0&4M%&F'1/5'1';/%7/1GG.&7'21&70175'4%&F#/04#Q'

.&85;5&85&#'N/%G'N/1G5'4%&45;#'

H0&4M%&'%B^54#F'

•! H0&4M%&'85Y&.M%&'(def,'B.&8F'N0&4M%&'&1G5'

.&'2%412'&1G5F;145'#%'N0&4M%&'%B^54#'

•! H0&4M%&'%B^54#F''1/5'Y/F#'421FF'%B^54#F'

•! Z%&#1.&F'85N102#'D1205'1/70G5&#F'

–!Z%G;0#58'1#'85Y&.M%&'MG5Q'W$.4$'.F'/525D1&#'

W$5&'0F.&7'G0#1B25'%B^54#F'

•! H0&4M%&F'F#%/5'#$5./'B%8"'1F'4%85'%B^54#'.&'

#$5'I$/*B*"#&'1_/.B0#5'

Z%85'%B^54#F'

•! LGG0#1B25'%B^54#'/5;/5F5&M&7'5S540#1B25''

B"#5'4%85'

–!*"B/)!&c'H0&4M%&'&1G5'

–!*"B/%"*)%-J'*"BK):/)!&-c'P%412'D1/.1B25F'

–!*"B/)!&-c'K1G5F'0F58'.&'#$5'B"#5'4%85'

–!*"BI:&&K):-c'K1G5F'%N'N/55'D1/.1B25F'

–!*"B*"#&J'*"B*"/-3-J'*"BL%&/)!&J'*"BL:-3%9/&/"J'M'

•! Z%&#1.&F'&%'/5N5/5&45'#%'G0#1B25'%B^54#F'

•!3%8025F'1&8'.&#5/14MD5'G%85'/52"'%&'

F5;1/1M%&'%N'4%85'1&8'N0&4M%&F'

!"#$%&'O"#5'Z%85'

•! ?%40G5&#58'.&'DIS'G%8025'

•! >;54.12'#5/G.&%2%7"'

–!N;Oc'9%;]%N]F#14a'.#5G'

–!N;OPc'>54%&8'#%;]G%F#'F#14a'.#5G'

–!N;OQc'9$./8'#%;]G%F#'F#14a'.#5G'

•! o;5/1M%&F'&%/G122"'#1a5'#%;'.#5G(F,'N/%G'F#14a'1&8';0#'B14a'#$5'/5F02#'.#5G'

•! O1F.4'F#14a'%;5/1M%&F'1/5'.&2.&5'Z'4%85'

•! O1F.4'%;5/1M%&F'%&';/.G.MD5'#";5F'1/5'0F0122"'#$/518]F1N5'

O1F.4'>#14a'o;5/1M%&'

•! 6;6BN;6c'E5G%D5'N;O'

–!LG;2.5F'854/51F.&7'%N'9o>'/5N5/5&45'4%0&#5/'

•! @;NBN8;J'@;NBNR@AAJ'@;NBF;D@'

–!E%#1#5'0;'#$5'#%;]G%F#'F#14a'.#5GF'

–!5*7*'#0;25'0&;14a.&7'c'a,b=b,a'

•! SD6BN;6c'?0;2.41#5'9o>'/5N5/5&45'

•! I&1/"'%;5/1M%&F'%&'9o>'(5*7*'DT?@UB6;OENEVA,'

•! O.&1/"'%;5/1M%&F'%&'9o>'1&8'9o>@'

(WET?@UB6;8A@J'B0DXNE6XUJ'BSEVESAJ'MY'

-1/.1B25F'

•! ?.4M%&1/"'N%/'D1/.1B25F'.&'1'F4%;5'

–!P%%a0;'N%/'XSX'&558F'#%'4$54a'.&'2%412'F4%;5Q'

72%B12'F4%;5'1&8'B0.2#].&'F4%;5'

•! P%412'D1/.1B25F'F#1M4122"'854.81B25'B"'4%G;.25/'

–!E025c'622'1FF.7&58'D1/.1B25F'1/5'2%412''

(1FF.7&G5&#'%;5/1#%/Q'.G;%/#,'

–!Z1&'B5'1445FF58'B"'.&85SQ'.&F#518'%N'8.4#'2%%a0;'

x = 1

def f(): y = x+1

-1/.1B25F'•! ON;@AB1X;?SB1SAXANABZX;W?X'/)!&'

•! 6445FF'#%'72%B12'D1/.1B25F'

•! ON;@AB'1'X;?SB'1'SAXANABF?ON'K):/$!'–!H1F#'1445FF'B"'0F.&7'1//1"'%N'2%412'D1/.1B25F'–!IF5F'*"BK):/)!&-[K):B/$!\'1//1"'N/%G'4%85'%B^54#'

•! ON;@AB'1'X;?SB'1'SAXANABT?0A'/)!&9'–!IF58'W$5&'F4%;5'.F'&%#'85#5/G.&1B25'(5*7*'9!(":3'.&'N0&4M%&,'

–!Z%85'%B^54#'$1F'*"B/)!&-'2.F#'W.#$'&1G5'.&8.45F'–!Z%G;.25/F'0F5F'emH6>9'd'emCPoO6P'W$5&5D5/';%FF.B25''

•! ON;@AB'1'X;?SB'1'SAXANAB?NN@'/)!9'•! 6_/.B0#5F'&1G5F'1/5'12F%'F#%/58'.&'*"B/)!&-'2.F#'

•! X;?SB'17;TON'*"/-H'–!E52.5F'%&'*"B*"/-3-[*"/-H\'2.F#'%N'4%&F#1&#F'.&'4%85'%B^54#'

L&]!2145'd'>2.45F'

•! L&];2145'%;5/1M%&F'1/5'2.a5'B.&1/"'%;5/1M%&FQ''

B0#'85G1&8'1'vF52N]G0#1B25v'%B^54#'%&'9o>@'

–!ET6X?7AB6;8A@J'ET6X?7AB0DXNE6XUJ'M'

–!9o>@'#$5&'B54%G5F'&5W'9o>''

–!H%/'%;5/1M%&F'F04$'1F'+=, -= (F55'!J!')<f,'

•! >2.45'%;5/1M%&F'

–!OXE7A]^c''9o>q9o>wcx'

–!OXE7A]Pc''9o>q9o>@w9o>cx'

–!OXE7A]Qc''9o>q9o>@wc9o>x'

–!OXE7A]_c''9o>q9o>)w9o>@c9o>x''

>2.45F'd'P.F#F'

•! >2.45'1FF.7&G5&#'

–!Z$1&75F'9o>'d'9o>@'d'9o>)'.&];2145'

–!ON;@ABOXE7A]^c'9o>wcxq9o>@'

–!ON;@ABOXE7A]Pc'9o>@w9o>cxq9o>)'

–!SAXANABOXE7A]U'

–!ON;@ABODWO7@c'9o>@w9o>xq9o>)'

–!SAXANABODWO7@`'852'9o>@w9o>x'

•! Z%2254M%&'#";5F'.&'!"#$%&'1/5'4$51;'1&8'N1F#'y'

!/.&M&7'

•! 6@ETNBAa6@'c'LG;25G5&#F'5S;/5FF.%&'

F#1#5G5&#'N%/'.&#5/14MD5'G%85'

•! 6@ETNBENA0c''!/.&#'9o>'#%'sys.stdout

–!6@ETNBENA0BN;c'!/.&#'9o>@'#%'9o>'Y25]2.a5'%B^54#'

–!K558F'#%'4%&F.85/'I&.4%85'1&8'F%V'F;145'

•! 6@ETNBTA8XETAJ'6@ETNBTA8XETABN;'

Z%&#/%2'>#/04#0/5F'

•! W@A?bBX;;6J'7;TNETDABX;;6`''

J&8F'#$5'40//5&#'B2%4a'

•! @AND@T'BV?XDA`''

E5#0/&'W.#$'9o>'#%'#$5'41225/'%N'1'N0&4M%&'

•! UEAXSBV?XDA`''

E5G%D5'9o>'1&8'".528'.#'N/%G'1'75&5/1#%/'

•! ATSBFET?XXU`'L&#5/;/5#5/'#$5&'5.#$5/'/5]/1.F5F'

5S45;M%&Q'/5#0/&F'N/%G'N0&4M%&'%/'4%&M&05F'

•! CD06BF;@8?@S'#&%3)J'CD06BEFBN@DA'#&%3)J'

CD06BEFBF?XOA'#&%3)J'CD06B?WO;XDNA'3):,&3'

?./54#2"'G1;;58'4%&45;#F'

•! AaA7BON0Nc'/0&'!"#$%&'4%85'

•! XEONB?66ATS`'N1F#'2.F#'4%G;/5$5&F.%&'

•! E06;@NBON?@c'N/%G'wG%8025z9o>x'.G;%/#'e'

•! DT6?7bBOAcDAT7A'*"$/3c'I&;14a'9o>'

•! F;@BENA@'c'9/51#'9o>'1F'.#5/1#%/Q'4122'/&G3dY'

G5#$%8Q';0F$'".52858'D1205'%&'F#14a'

•! @?EOABV?@?@ZOc'E1.F5F'1&'5S45;M%&Q'

;1/1G5#5/F'1/5'%&'F#14a'

?./54#2"'G1;;58'4%&45;#F'

•! WDEXSBND6XA'/'

–!Z/51#5'#0;25'%N'&'#%;]G%F#'.#5GF'1&8';0F$'/5F02#''

•! WDEXSBXEON'/'

•! WDEXSB0?6'

–!Z/51#5'5G;#"'8.4M%&1/"'%&'#$5'F#14a'

•! WDEXSB7X?OO'`'Z/51#5F'1'&5W'421FF'%B^54#'

–!9o>c'?.4M%&1/"'%N'G5#$%8F'

–!9o>@c'90;25'%N'B1F5'421FF'&1G5F'

–!9o>)c'Z21FF'&1G5'

Z6PPmHIKZ9LoK'1/74'

•! 7?XXBFDT7NE;T'):,*'–!):,*'2%W'B"#5'4%&#1.&F'&0GB5/'%N';%F.M%&12';1/1G5#5/F'

–!):,*'$.7$'B"#5'4%&#1.&F'&0GB5/'%N'a5"W%/8';1/1G5#5/F'

–!!1/1G5#5/F'.#F52N'1/5'%&'#$5'F#14aQ'1V5/'#$5G'#$5'N0&4M%&'%B^54#'#%'4122'

•!0?bABFDT7NE;T'):,*'–!!0F$5F'&5W'N0&4M%&'%B^54#Q'9o>'.F'#$5'4%85Q'):,*'85N102#';1/1G5#5/F'1/5'B52%W'9o>'

•! 6&8'1'2%#'G%/5'U*'(/518'45D12*4,'

L&#/%804.&7'1'&5W'B"#5'4%85'

•! JS#5&8'%{4.12'2.F#'%N'%;4%85F''

(Include/opcode.h;

Lib/opcode.py,'

•! L&4/51F5'36CLZ'&0GB5/''

(Python/import.c,'

•! Z$1&75'6>9]iB"#5'4%85'4%G;.25/''

(Python/compiler.c,'

•! Z$1&75'B"#5'4%85'.&#5/;/5#5/''

(Python/ceval.c,'

9$/518.&7'.&'#$5'-3'

•! !"#$%&'#$/518F'1/5'#/05'o>'#$/518F'

•! C2%B12'.&#5/;/5#5/'2%4a'

–!o&2"'%&5'(!"#$%&,'#$/518'.F'/0&&.&7'.&#5/;/5#5/'

4%85'1#'#$5'F1G5'MG5'

–!E57021/'4%&#5S#'FW.#4$'1V5/'1'&0GB5/'%N'5S540#58'

.&F#/04M%&F'%/'W.#$'2%&7]/0&&.&7'%;5/1M%&F'

–!!/%B25G'W.#$'G02M]4%/5'Z!IvF'

–!E5251F58'N%/'2%&7]/0&&.&7'Z'4%85'(5*7*'F"F#5G'4122,'

–!!5/N%/G1&45'18D1&#175'

•! O"#5'4%85'.&F#/04M%&F'1/5'1#%G.4'

>#14a25FF'!"#$%&'

•! JD5/"'N0&4M%&'4122'4/51#5F'1'Z'F#14a'N/1G5'

–!>0B/%0M&5F'DF*'4%/%0M&5F'

•! !"#$%&'N0&4M%&F'41&'14#'1F'4%/%0M&5F'%/''

3)-+%&3-Q'4%&40//5&#2"'5S540#58'B"'F4$58025/'

–!>0;;%/#'N%/'4$1&&52'4%GG0&.41M%&'

–!64#'1F'2.7$#W5.7$#'#$/518F'

•! E585F.7&58'.&#5/;/5#5/'2%%;'#%'1D%.8'#$5'Z'

F#14a'N/1G5'4/51M%&'%&'N0&4M%&'4122'

35G%/"'31&175G5&#'

E63' >W1;'

o;5/1M&7'>"F#5G'-33''(;175'B1F58,'

o>'G5G%/"'122%41#%/''('malloc() ,'

b51;'122%41M%&'W/1;;5/'(;"G5G*$,'

'PyMem_Alloc, PyMem_Free, ….

oB^54#'622%41#%/'(%BG122%4*4,'

PyObject_Malloc, PyObject_Free, …

oB^54#]F;54.Y4'122%41#%/F'

(5*7*'.&#%B^54#*4,'

Z'4%85'%N'.&#5/;/5#5/'d'G%8025F

C5&5/.4'%B^54#'G1&175G5&#'(%B^54#*4,

PyObject_New, PyObject_Del,…'

oB^54#'622%41#%/'

•! O"'85F.7&Q'G1&"'D5/"'FG122'122%41M%&'/5|05F#F'

–!JD5/"#$.&7'.F'1&'%B^54#'y'

•! >;54.12'%;MG.n1M%&'N%/';5/N%/G1&45''

(%BG122%4*4,'

–!E5|05F#F'i)+u'B"#5F'$1&8258'B"'malloc

–!>G1225/'/5|05F#F'F.n5F'1/5'7/%0;58'(='B"#5F'1;1/#,'

•!35G%/"';%%2F'%N'ta'25&7#$'514$'(-33';175'F.n5,Q''

W.#$'%W&'N/55'2.F#'

•!!%%2F'1/5'0F58'B"'8.g5/5&#'/5|05F#'F.n5'122%41#%/F'

•!='O"#5'12.7&G5&#'%N'/5#0/&58'188/5FF'

C1/B175'Z%2254#%/'

•! 9/18.M%&12'71/B175'4%2254M%&'(5*7*'G1/a'1&8'

FW55;,'W%028'85G1&8'1'F5#'%N'/%%#'%B^54#F'

–!JS#5&F.%&'G%8025F'41&'4/51#5'%W&'!"#$%&'%B^54#F'

–!CZ'N%/'122%41#58'Z'%B^54#F'&%#'/5122"';%/#1B25'

–!9/1D5/F.&7'122'%B^54#F'.F'5S;5&F.D5'

•! L&F#518c'>.G;25'/5N5/5&45'4%0&M&7''

–!L&'ob->ob_refcnt N/%G PyObject_HEAD

–!l%/aF'W.#$'5D5/"''malloc() / free()'

•! Py_DECREF() ]''(%B^54#*$,'

–!Z122F'Y&12.n5/'W$5&'/5N5/5&45'4%0&#'4%G5F'#%'n5/%'

C1/B175'Z%2254#%/'

•! H0&4M%&F'#$1#'4/51#5'1&'%B^54#'F5#'#$5''

ob_refcnt'#%'@Q'1&8'F#%/5'.#']'%/'85F#/%"'.#'

B"'4122.&7'Py_DECREF

–!>%G5'F#%/5'N0&4M%&F'#$5/5N%/5'8%&v#'.&4/51F5'#$5'

/5N5/5&45'4%0&#5/'(5*7*'PyList_SetItem(),'

•! oB^54#F'41&'B5'F#04a58'.&'#/145B14aF'

•!l51a/5N'G%8025'(!J!')<+,'

–!H%/'%B^54#'414$5F'(W51a'8.4.M%&1/.5F,'

–!H%/'4./4021/'/5N5/5&45F''(?o3'&%85'/521M%&F,'

Z./4021/'E5N5/5&45F'

b518'P.F#'525G5&#'

%Bm/5N4&#q)'

P.F#'525G5&#'

%Bm/5N4&#q@'

P.F#'525G5&#'

%Bm/5N4&#q@'

b518'P.F#'525G5&#'

%Bm/5N4&#q@'

P.F#'525G5&#'

%Bm/5N4&#q@'

P.F#'525G5&#'

%Bm/5N4&#q@'

Z"42.4'C1/B175'Z%2254#%/'

•! E5N5/5&45'4"425c'I&0F58'%B^54#(F,'5D5&'

#$%07$'/5N5/5&45'4%0&#5/'.F'&%#'n5/%'

–!95F#'.F'%&2"'/525D1&#'N%/'4%&#1.&5/'#";5F'

•! IF175'%N'8%0B25]2.&a58'2.F#'%N'122'4%&#1.&5/'

%B^54#F'(gc_next , gc_pref,'

–!?5#5/G.&5'122'4%&#1.&5/F'W$.4$'1/5'%&2"'

/5N5/5&458'B"'#$5G'F52N'

•! oB^54#F'.&'4"425F'W.#$'Y&12.n5/F''__del()__

1/5'18858'#%'F5#'%N'0&4%2254#1B25'%B^54#F'

–!o/85/'%N'Y&12.n5/'4122F'.&'#$5'4"425'0&4251/'

>%0/45F'•! IF5'#$5'F%0/45Q'P0a5'(!"#$%&'>-K'#/0&aQ'31/4$')<<=,'

•! 31/a'P0#nQ'!/%7/1GG.&7'!"#$%&*'ovE5.22"')<<u'

•! $_;cddG1.2*;"#$%&*%/7d;.;5/G1.2d;"#$%&]2.F#'

•! $_;cddWWW*;"#$%&*%/7'['!J!vFQ'!"#$%&'90#%/.12Q''

JS#5&8.&7'1&8'JGB588.&7'#$5'!"#$%&'L&#5/;/5#5/'90#%/.12Q'!"#$%&'H6}'

•! $_;cdd8%4F*;"#$%&*%/7d2.BdB"#54%85F*$#G2'

•! $_;cdd8%4F*;"#$%&*%/7d1;.d#$/518F*$#G2'

•! $_;cddWWW*D%.8F;145*%/7*0ad;"#$%&d1/M425Fd4%85mB2%4aF*F$#G2'

•! $_;cdd5~%#*%/7d;"/5Nd#";5]4%85*$#G'

•! $_;cddWWW*85DF$58*4%Gd4d1d!"#$%&db%W]!"#$%&]E0&F]!/%7/1GFd'

•! $_;cddWWW*/5SS*4%Gd�8a0$2G1&d;"#$%&m@<@d;"#$%&m@<@*$#G2'

•! $_;cdd1/4#/.S*4%Gd&1Fd;"#$%&d74d'

•! $_;cddWWW*F#1&N%/8*580d421FFd4F)t)dF2.85Fd)<<ud;"#$%&]D1&E%FF0G*;8N'