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 @ 2023-07-04 21:54  Allen_Hao  阅读(67)  评论(0)    收藏  举报