关于 python 大整数对象池

2016-12-10 11:23:04 +08:00
 aiqier

最近看了《 python 源码分析》,里面提到了 python 的小整数对象池和大整数对象池,然后我发现,如果我在解释器上直接运行:

>>> a = 10000
>>> b = 10000

那么 id(a)id(b)是不一样的。

但是如果我写个main.py去跑,那么id(a)id(b)又是一样的了,是因为交互解释器没有用到大整数对象池吗?还是因为 py 文件在编译的时候做了优化?

3114 次点击
所在节点    Python
4 条回复
zhuangzhuang1988
2016-12-10 11:42:57 +08:00
如果我没猜错的话, 模块里面应该是 const 值, 然后 a,b 都指向这个
而在 repl 的时候, 每次都是创建的, repl 中不识别出 1000 是 const
herozem
2016-12-10 17:01:03 +08:00
https://github.com/jiajunhuang/cpython/blob/python_source_analysis/Objects/intobject.c#L83-L117

我也在看。不过很奇怪的是,这段代码里并没有根据值去寻找已存在的大整数。所以按照代码来看应该是就算是数值
相同的两个大整数,应该是每次都返回不同的地址才对。
glogo
2016-12-10 17:12:27 +08:00
这个问题应该是楼主问的吧, https://segmentfault.com/q/1010000007756407
答案 R 大给出了一个
aiqier
2016-12-10 18:07:58 +08:00
@glogo 对,是我问的,。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/326616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX