不知道大家学习python中有没有看过一个案例
a=256
b=256
print(id(a)==id(b))
c=257
d=257
print(id(c)==id(d))
大家运行后的答案应该如下
我们继续测试一组案例
a=-5
b=-5
print(id(a)==id(b))
c=-6
d=-6
print(id(c)==id(d))
运行结果如下
个人在学习的时候觉得很奇怪,但是在网络上却没有找到答案。在后来的学习中找到了答案,在此解释一下:
这个问题牵涉到Python对小整数的优化和内存管理方式。在Python中,对于-5到256之间的整数,这些常用的数字会在Python解释器启动时就被提前创建并分配好内存空间,这样同样的对象就会引用同一个内存地址,也就具有相同的id。这是因为这些值足够常用,预先创建可以提高执行速度。相比之下,大于256或者小于-5的数字,Python并不会预先创建并持久保存。当我们创建这些数值时,Python会为每一个数值分配独立的内存空间,因此,哪怕数值相同也会有不同的id。
但是有趣的事情又发生了,大家如果在pycharm编译器上运行这两段代码的时候会发现都是true
这是因为现代Python的行为有一个小的变化。在某些情况下,对于比思考的数字范围更大的整数,你可能看到id(a) == id(b)
为 True
。如果你立即因为相同的值分配了两个变量,无论值是多少,Python解释器可能会为了有效的内存使用和性能优化将它们放在同一个地方。
今日的分享到这,希望这对大家理解python存储有一些帮助