python - 小数缓存是在 Python 规范中定义的,还是一个实现细节?
问题描述
Python 似乎对 -5 到 256 范围内的数字有一个所谓的“小数缓存”。我们可以用下面的程序来证明这一点:
for i in range(-7, 258):
if id(i) == id(i + 0):
print(i, "is cached")
else:
print(i, "is not cached")
输出是
-7 is not cached
-6 is not cached
-5 is cached
-4 is cached
[...]
255 is cached
256 is cached
257 is not cached
我想知道这是在 Python 规范中定义还是实现细节。
解决方案
这是一个实现细节:Python 语言参考(所有版本,从 2.7 到 3.9)的第 3.1 章说:
对于不可变类型,计算新值的操作实际上可能返回对具有相同类型和值的任何现有对象的引用
和
例如, after
a = 1; b = 1
和a
可能b
会或可能不会引用具有值 1 的同一对象,具体取决于实现
(强调我的)
Python/C API 参考也提到了它
当前实现为 -5 到 256 之间的所有整数保留一个整数对象数组,
(强调我的)这也很清楚,这在未来可能会改变。
推荐阅读
- dictionary - 法语语音词典
- javascript - 即使在控制台日志上定义了反应状态也是未定义的
- javascript - React:在动画期间调用 Render()。怎么了?
- r - 如何用一个向量制作一个由两个矩阵组成的数组?
- typescript - 使用参数对函数进行类型推断
- elasticsearch - 如何从输出中的elasticsearch中只获取一个字段?
- javascript - Javascript:当用户从树中选择/取消选择节点时如何保留树结构和祖父母关系
- handlebars.js - 如何在 bigcommerce 车把中显示 JS 变量?
- c++ - 这段代码如何不能解决 ABA 问题?
- java - 我应该使用什么来代替弃用的 CollectionModel?