相关疑难解决方法(0)

Python中的Integer Cache有什么用?

深入研究Python的源代码后,我发现它维护了一个PyInt_Objects 数组,范围从int(-5)到int(256)(@src/Objects/intobject.c)

一个小实验证明了这一点:

>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)

但是如果我在py文件中一起运行这些代码(或者用分号连接它们),结果会有所不同:

>>> a = 257; b = 257; a is b
True
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么它们仍然是同一个对象,所以我深入研究语法树和编译器,我想出了一个下面列出的调用层次结构:

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 …
Run Code Online (Sandbox Code Playgroud)

python caching code-analysis literals python-internals

74
推荐指数
1
解决办法
6755
查看次数

为什么具有相同值的可变对象在Python中具有不同的id

感谢您宝贵的时间,我刚开始学习Python.我遇到了Mutable和Immutable对象.据我所知,可变对象在创建后可以更改.

a = [1,2,3]
print(id(a))
45809352
a = [3,2,1]
print(id(a))
52402312
Run Code Online (Sandbox Code Playgroud)

那么为什么同一个列表"a"的id在其值被改变时会被改变.

python

-1
推荐指数
1
解决办法
92
查看次数