【整理】python 小整数对象池与大整数对象池的总结

原因

今天与朋友谈到了python中的is,=,==,出现了一些争论,争论点是为两个变量赋予相同的数值,那么这两个变量的id一定不相同吗?

先要了解的

Python是一门弱变量类型语言,变量使用之前无需声明变量类型。对于一个变量,有三个属性:id(内存地址),type(变量类型),value(值),对于=,==,is:

  • =赋值操作,传递的是id,type,value
  • ==判断value是否相等
  • is判断id是否相等
    =赋值相对比较容易理解,我就不再赘述,只谈is 和 ==

小整数对象池

在python中,为避免小数值整数和短长度字符串频繁申请和销毁内存空间,使用了小整数对象池。Python shell 中, 对小数值整数的定义是 [-5, 256],小整数字符串是只包含字母、数字、下划线的字符串, 这些整数对象是提前建立好的,不会被垃圾回收,新建一个相同的值,永远对应同一个内存地址。
所以,在python shell里面,如果 a ,b 数值相同,而且又都在小整数对象池内,那么a ==b,a is b的答案都是True;
如果 a ,b 数值相同,但是不在小整数对象池内,那么a ==b的答案是True,a is b是False:

>>> a= "111111111111111111111111111111111111"  #只包含整数的字符串
>>> b= "111111111111111111111111111111111111"
>>> a == b
True
>>> a is b
True


>>> a = -5  # [-5,256]的整数
>>> b = -5
>>> a is b
True


>>> a=-88  #[-5,256]以外的整数
>>> b = -88
>>> a is b
False

>>> a = "aaaaaaaaaaaa aaa"  # 不是只包含字母、数字、下划线的字符串
>>> b = "aaaaaaaaaaaa aaa"
>>> a is b
False

大整数对象池

在pycharm中,没有python shell的那么多限制,只要是整数(不限大小)或者字符串(只要是字符串)的值相等,那么这两个值的value,id,type就全部相同。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值