int的缓存策略(特别容易混)

说明

为了提高性能,对于一部分整数对象(int objects)采用了缓存策略。

在Python解释器启动时,会自动创建一个适用于整数的缓存池。
该缓存池主要用于缓存范围在-5到256之间的整数对象。
当使用相同的整数值创建多个变量时,这些变量将引用缓存池中相同的整数对象,而不是每次都创建新的对象。


特别注意:
命令行模式下,Python仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来C语言底层用数组实现,连续分配空间,便于查找,而并非是所有整数对象。

文件模式下,所有数字都会被缓存,范围是:[-无穷大,+无穷大])

 

缓存实现:[-5,256]仍然底层用数组实现;不在[-5,256]出现的数,缓存到链表中,不连续分配空间。

示例

命令行:

 

pycharm:

复制代码
 1 '''
 2 为了提高性能,对于一部分整数对象(int objects)采用了缓存策略。
 3 在Python解释器启动时,会自动创建一个适用于整数的缓存池。
 4 该缓存池主要用于缓存范围在-5到256之间的整数对象。
 5 当使用相同的整数值创建多个变量时,这些变量将引用缓存池中相同的整数对象,而不是每次都创建新的对象。
 6 特别注意:
 7 命令行模式下,Python仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来C语言底层用数组实现,连续分配空间,便于查找,而并非是所有整数对象。
 8 
 9 文件模式下,所有数字都会被缓存,范围是:[-无穷大,+无穷大])
10 
11 缓存实现:[-5,256]仍然底层用数组实现;不在[-5,256]出现的数,缓存到链表中,不连续分配空间。
12 
13 '''
14 
15 a = 10
16 b = 10
17 
18 print(a is b)  # 输出 True,因为 a 和 b 引用了相同的整数对象
19 
20 c = 1001
21 d = 1001
22 
23 print(c is d)  # 输出 False,因为 c 和 d 引用的是不同的整数对象,但是此处是True,不同的python解释器有不同的策略
24 print(c == d)  # 输出 True,因为 c 和 d 的值相等
25 
26 c = -6
27 d = -6
28 print(c is d)  # True
29 
30 c = 256
31 d = 256
32 print(c is d)  # True
33 
34 c = 257
35 d = 257
36 print(c is d)  # True
复制代码

 

posted @   Allen_Hao  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示