Python内部的Integer Cache是怎么回事?
PyInt_Object
>>> a = 1>>> b = 1>>> a is bTrue>>> a = 257>>> b = 257>>> a is bFalse
>>> a = 257; b = 257; a is bTrue
PyRun_FileExFlags() mod = PyParser_ASTFromFile() node *n = PyParser_ParseFileFlagsEx() //source to cst parsetoke() ps = PyParser_New() for (;;) PyTokenizer_Get() PyParser_AddToken(ps, ...) mod = PyAST_FromNode(n, ...) //cst to ast run_mod(mod, ...) co = PyAST_Compile(mod, ...) //ast to CFG PyFuture_FromAST() PySymtable_Build() co = compiler_mod() PyEval_EvalCode(co, ...) PyEval_EvalCodeEx()
PyInt_FromLong
PyAST_FromNode
a = 257b = 257print "id(a) = %d, id(b) = %d" % (id(a), id(b))
DEBUG: before PyAST_FromNodename = a ival = 257, id = 176046536name = b ival = 257, id = 176046752name = a name = b DEBUG: after PyAST_FromNoderun_modPyAST_Compile ok id(a) = 176046536, id(b) = 176046536Eval ok
cst
ast
PyInt_Object
ast_for_atom()
PyAST_Compile
PyEval_EvalCode
相关分类