对Python中小整数对象池和大整数对象池的使用详解

时间:2021-05-23

1. 小整数对象池

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置,

所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。

In [1]: a=-5In [2]: b=-5In [3]: a is bOut[3]: TrueIn [4]: a=256In [5]: b=256In [6]: a is bOut[6]: TrueIn [7]: a=1000In [8]: b=1000In [9]: a is bOut[9]: Falseintern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。In [13]: a="abc"In [14]: b="abc"In [15]: a is bOut[15]: TrueIn [16]: a="helloworld"In [17]: b="helloworld"In [18]: a is bOut[18]: TrueIn [19]: a="hello world"In [20]: b="hello world"In [21]: a is bOut[21]: False s1 = "abcd"s2 = "abcd"print(s1 is s2)s1 = "a" * 20s2 = "a" * 20print(s1 is s2)s1 = "a" * 21s2 = "a" * 21print(s1 is s2)s1 = "ab" * 10s2 = "ab" * 10print(s1 is s2)s1 = "ab" * 11s2 = "ab" * 11print(s1 is s2)# True# True# False# True# False

2.大整数对象池。说明:终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以

这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。

C1.b is C2.bIn [22]: a=1000In [23]: b=1000In [24]: a is bOut[24]: FalseIn [25]: a=-1888In [26]: b=-1888In [27]: a is bOut[27]: FalseIn [28]: c1 = 1000d1 = 1000print(c1 is d1) # Trueclass C1(object): a = 100 b = 100 c = 1000 d = 1000class C2(object): a = 100 b = 1000print(C1.a is C1.b) # Trueprint(C1.a is C2.a) # Trueprint(C1.c is C1.d) # Trueprint(C1.b is C2.b) # False

以上这篇对Python中小整数对象池和大整数对象池的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章