时间: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# False2.大整数对象池。说明:终端是每次执行一次,所以每次的大整数都重新创建,而在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邮箱联系删除。
'=='比较的是两个对象的值'is'比较的是两个对象的内存地址(id)下面我们着重理解'is'。对于这个,我们需要知道:小整数对象池,大整数对象池,以及inte
临时对象池pool是啥?sync.Pool给了一大段注释来说明pool是啥,我们看看这段都说了些什么。临时对象池是一些可以分别存储和取出的临时对象。池中的对象会
在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比
compareTo方法 compareTo()是两个字符串对象比较大小,返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。相等则返回0。co
本文实例讲述了Python内存管理。分享给大家供大家参考,具体如下:a=1a是引用,1是对象。Python缓存整数和短字符串,对象只有一份,但长字符串和其他对象