a = 1
b = 1
id(a) == id(b) # True下面是Python优化内存消耗和重用内存的两个变量。
c = 1.45
d = 1.45
id(c) == id(d) # False - Why ?在float的情况下,Python没有使用这种优化。为什么?
发布于 2020-03-03 12:11:42
CPython (引用解释器),作为实现细节,has a small int cache for ints between -5 and 256;每个值都应该是唯一的(在实践中并不总是正确的,但在大多数情况下它是正确的;尽管您不应该依赖它)。
这使得像迭代bytes对象这样的简单任务变得非常便宜(因为所有的值都可以从缓存中取出),并且为常用的小int值节省了一些内存。但是,它不是动态调整大小的,所以创建两次257将得到不同的id(并不总是这样,但在许多情况下;在编译过程中还应用了其他常量缓存操作,这些操作可能会折叠在非常接近的情况下用作文字的值)。
对于float,没有这样的缓存,因为有几乎无限数量的float值,而且很少有可能在程序的大范围内看到重用。
https://stackoverflow.com/questions/60499923
复制相似问题