python小整数池与大整数池
在python中定義變量會(huì)有:id,type,value。對(duì)于==比較的是value,對(duì)于is比較的是id。
因此,對(duì)于相同value的變量,它的type相同,但是它的id值可能不一樣。對(duì)于相同id的變量,它的type和value值肯定是一樣。
例如:
>>> s1 = "hello walle" >>> s2 = "hello walle" >>> id(s1) 4347731568 >>> id(s2) 4347731376 >>> s1 is s2 False >>> s1 == s2 True但是,有的時(shí)候?qū)τ谙嗤闹?#xff0c;如果創(chuàng)建兩次,會(huì)發(fā)現(xiàn)它的id值也是一樣的。
例如:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' >>> s1 = "walle" >>> s2 = "walle" >>> id(s1) 4347734088 >>> id(s2) 4347734088 >>> s1 is s2 True >>>s1 == s2 True這是因?yàn)樵诮换ナ侥J较?/strong>
1、Python為了優(yōu)化速度,使用了小整數(shù)對(duì)象池, 避免為整數(shù)頻繁申請(qǐng)和銷(xiāo)毀內(nèi)存空間。Python 對(duì)小整數(shù)的定義是 [-5, 256] 這些整數(shù)對(duì)象是提前建立好的,不會(huì)被垃圾回收。在一個(gè) Python 的程序中,無(wú)論這個(gè)整數(shù)處于LEGB中的哪個(gè)位置,所有位于這個(gè)范圍內(nèi)的整數(shù)使用的都是同一個(gè)對(duì)象。同理,單個(gè)字母也是這樣的。
2、intern機(jī)制處理空格一個(gè)單詞的復(fù)用機(jī)會(huì)大,所以創(chuàng)建一次,有空格創(chuàng)建多次,但是字符串長(zhǎng)度大于20,就不是創(chuàng)建一次了。
那么在pycharm中如何呢?
x = "Info Walle: 18"*100 y = "Info Walle: 18"*100print(x == y) #True print(x is y) #True print(id(x), id(y))我們會(huì)發(fā)現(xiàn)即使加上空格,x跟y的id還是相同的。
這是因?yàn)樵趐ycharm中,
每次運(yùn)行是所有代碼都加載在內(nèi)存中,屬于一個(gè)整體,所以這個(gè)時(shí)候會(huì)有一個(gè)大整數(shù)對(duì)象池,即處于一個(gè)代碼塊的大整數(shù)是同一個(gè)對(duì)象。我們只需要記住這是一種優(yōu)化機(jī)制,至于范圍到底多大,無(wú)需細(xì)究。
總結(jié)
以上是生活随笔為你收集整理的python小整数池与大整数池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python函数的递归调用
- 下一篇: Python练习题:---给定一个字符串