Python中小整数对象池和大整数对象池
1.小整數(shù)對(duì)象池
整數(shù)在程序中的使用非常廣泛,Python為了優(yōu)化速度,使用了小整數(shù)對(duì)象池, 避免為整數(shù)頻繁申請(qǐng)和銷毀內(nèi)存空間。
Python 對(duì)小整數(shù)的定義是 [-5, 256] 這些整數(shù)對(duì)象是提前建立好的,不會(huì)被垃圾回收。在一個(gè) Python 的程序中,無(wú)論這個(gè)整數(shù)處于LEGB中的哪個(gè)位置,
所有位于這個(gè)范圍內(nèi)的整數(shù)使用的都是同一個(gè)對(duì)象。同理,單個(gè)字母也是這樣的。
In [1]: a=-5In [2]: b=-5In [3]: a is b Out[3]: TrueIn [4]: a=256In [5]: b=256In [6]: a is b Out[6]: TrueIn [7]: a=1000In [8]: b=1000In [9]: a is b Out[9]: Falseintern機(jī)制處理空格一個(gè)單詞的復(fù)用機(jī)會(huì)大,所以創(chuàng)建一次,有空格創(chuàng)建多次,但是字符串長(zhǎng)度大于20,就不是創(chuàng)建一次了。
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' In [13]: a="abc"In [14]: b="abc"In [15]: a is b Out[15]: TrueIn [16]: a="helloworld"In [17]: b="helloworld"In [18]: a is b Out[18]: TrueIn [19]: a="hello world"In [20]: b="hello world"In [21]: a is b Out[21]: False ''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' s1 = "abcd" s2 = "abcd" print(s1 is s2)s1 = "a" * 20 s2 = "a" * 20 print(s1 is s2)s1 = "a" * 21 s2 = "a" * 21 print(s1 is s2)s1 = "ab" * 10 s2 = "ab" * 10 print(s1 is s2)s1 = "ab" * 11 s2 = "ab" * 11 print(s1 is s2) # True # True # False # True # False2.大整數(shù)對(duì)象池。
說(shuō)明:終端是每次執(zhí)行一次,所以每次的大整數(shù)都重新創(chuàng)建,而在pycharm中,每次運(yùn)行是所有代碼都加載都內(nèi)存中,屬于一個(gè)整體,所以
這個(gè)時(shí)候會(huì)有一個(gè)大整數(shù)對(duì)象池,即處于一個(gè)代碼塊的大整數(shù)是同一個(gè)對(duì)象。c1 和d1 處于一個(gè)代碼塊,而c1.b和c2.b分別有自己的代碼塊,所以不相等。
C1.b is C2.b
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' In [22]: a=1000In [23]: b=1000In [24]: a is b Out[24]: FalseIn [25]: a=-1888In [26]: b=-1888In [27]: a is b Out[27]: FalseIn [28]: c1 = 1000 d1 = 1000 print(c1 is d1) # Trueclass C1(object):a = 100b = 100c = 1000d = 1000class C2(object):a = 100b = 1000print(C1.a is C1.b) # True print(C1.a is C2.a) # True print(C1.c is C1.d) # True print(C1.b is C2.b) # False總結(jié)
以上是生活随笔為你收集整理的Python中小整数对象池和大整数对象池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python 中的属性访问与描述符
- 下一篇: Python一切皆对象