101. 内置函数id和小整数池

本文深入探讨Python内置函数id的工作原理,解析变量标识符与内存地址的关系,以及小整数池如何优化内存管理,提升程序执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内置函数id

  Python语言中的变量都有自己的id,这是一个唯一的标识符,是一个整数。在CPython类型解释器中(我们用的解释器就属于CPython解释器),这个整数是对象的内存地址。

x = 1
print(id(x))
x = 2
print(id(x))

运行结果为:

1704750560
1704750592

  代码分析:通过id函数获取了变量x的标识符(即x对应的内存地址),当x的值改变之后,标识符也发生了变化。

z = y = x = 10
print(id(x))
print(id(y))
print(id(z))
c = b = a = 10000
print(id(a))
print(id(b))
print(id(c))

运行结果为:

1704750848
1704750848
1704750848
2807393913456
2807393913456
2807393913456

  代码分析:赋值相同的变量,标识符相同,也就是它们共用一块内存。这种机制和其他计算机语言(如C语言)有明显差异。

小整数池

  上面我们看到的运行结果是在Pycharm中Run窗口中的内容。下面在Pycharm中的Python Console界面再次进行测试(这样使用的是原装的python解释器。也可以用启用命令提示符,即cmd,调用python解释器进行测试)
在这里插入图片描述
  可见,对于b = a = 256,a和b的id值是相同的;但对于 d = c = 257,两者的id值就不同了。这种奇怪的现象涉及到了小整数池。
  Python解释器为了优化速度,使用了小整数池, 避免为整数频繁申请和销毁内存空间。小整数池的范围是 [-5, 256]。 这些整数对象是提前建立好的,不会被回收。在一个 Python 的程序中,在小整数池范围内,无论相同整数处于什么位置,使用的都是同一个对象。同理,单个字母也是这样的。
  而Pycharm在Python解释器的基础上进行了进一步优化(当然是以耗费更多内存为代价),将小整数池范围扩大了,不过初级开发者没有必要关注这些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值