关于python-5至256地址问题

不知道大家学习python中有没有看过一个案例

a=256
b=256
print(id(a)==id(b)) 
c=257
d=257
print(id(c)==id(d)) 

大家运行后的答案应该如下

91694505d8a242d3bac9c35a581eb8df.png

我们继续测试一组案例

a=-5
b=-5
print(id(a)==id(b))
c=-6
d=-6
print(id(c)==id(d))

运行结果如下

8dbc2786f5ae49e0a804629452459d6d.png

个人在学习的时候觉得很奇怪,但是在网络上却没有找到答案。在后来的学习中找到了答案,在此解释一下:

这个问题牵涉到Python对小整数的优化和内存管理方式。在Python中,对于-5到256之间的整数,这些常用的数字会在Python解释器启动时就被提前创建并分配好内存空间,这样同样的对象就会引用同一个内存地址,也就具有相同的id。这是因为这些值足够常用,预先创建可以提高执行速度。相比之下,大于256或者小于-5的数字,Python并不会预先创建并持久保存。当我们创建这些数值时,Python会为每一个数值分配独立的内存空间,因此,哪怕数值相同也会有不同的id。

但是有趣的事情又发生了,大家如果在pycharm编译器上运行这两段代码的时候会发现都是true

这是因为现代Python的行为有一个小的变化。在某些情况下,对于比思考的数字范围更大的整数,你可能看到id(a) == id(b)为 True。如果你立即因为相同的值分配了两个变量,无论值是多少,Python解释器可能会为了有效的内存使用和性能优化将它们放在同一个地方。

今日的分享到这,希望这对大家理解python存储有一些帮助

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值