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

浙公网安备 33010602011771号