python列表比较的原理_Python‘==‘ 及 ‘is‘相关原理解析

本文介绍了Python中'=='和'is'的区别。'=='比较对象值,'is'比较内存地址。Python的小整数池(-5到256)使得小整数'is'比较返回True,大整数对象池用于存储大整数,intern机制确保相同内容的字符串共享同一对象。然而,对于列表、字典等复杂类型,每次创建都是新对象,'is'比较为False。最后,展示了列表内存回收与复用的情况。
摘要由CSDN通过智能技术生成

'==' 比较的是两个对象的值

'is' 比较的是两个对象的内存地址(id)

下面我们着重理解 'is'。对于这个,我们需要知道:小整数对象池,大整数对象池,以及intern机制

小整数池:python预先创建小整数缓存池—— [-5~256],无论创建多少个对象,都是指向同一个地址,这样是为了避免小整数频繁申请和释放内存。

>>> a=3

>>> b=3

>>> a is b

true

>>> 1+2 is 3

true

>>> a=1.0

>>> b=1.0

>>> a is b

false

大整数对象池:python 提供了一个可扩展的内存空间,也叫通用整数对象池,谁需要用就给谁用,免去了申请内存。这个空间是一个pyintblock结构,是用一个单向列表连接一串内存(block),这个列表由 block_list 维护,而每个 block 维护一个 整数对象数组(objects),用于存放被缓存的整数对象,即处于一个内存(block)的大整数是同一个对象。

>>> def func():

... a=10.1

... b=10.1

... return a is b

...

>>> func()

true

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值