校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解Python小數(shù)據(jù)池和代碼塊緩存機制

詳解Python小數(shù)據(jù)池和代碼塊緩存機制

熱門標簽:蘇州人工外呼系統(tǒng)軟件 佛山通用400電話申請 看懂地圖標注方法 電話外呼系統(tǒng)招商代理 淮安呼叫中心外呼系統(tǒng)如何 廣東旅游地圖標注 京華圖書館地圖標注 打印谷歌地圖標注 電話機器人貸款詐騙

前言

本文除"總結(jié)"外,其余均為認識過程;3.7.5;這部分官方文檔不知道在哪里找,目前沒有找到,有誰知道的可以麻煩留言嗎? 謝謝了!

總結(jié):

如果在同一代碼塊下,則采用同一代碼塊下的緩存機制;
如果是不同代碼塊,則采用小數(shù)據(jù)池的駐留機制;
需要注意的是,交互式輸入時,每個命令都是一個代碼塊;

實現(xiàn) Intern 保留機制的方式非常簡單,就是通過維護一個字符串儲蓄池,這個池子是一個字典結(jié)構(gòu),編譯時,如果字符串已經(jīng)存在于池子中就不再去創(chuàng)建新的字符串,直接返回之前創(chuàng)建好的字符串對象,
如果之前還沒有加入到該池子中,則先構(gòu)造一個字符串對象,并把這個對象加入到池子中去,方便下一次獲取;

長度為0與1的字符串一定會被駐留;
字符串駐留發(fā)生在程序編譯時;
被駐留的字符串必須由 ASCll 字母, 數(shù)字以及下劃線組成;

1.代碼塊的緩存機制

Python 程序是由代碼塊構(gòu)造的。塊是一個 Python 程序的文本,它是作為一個單元執(zhí)行的。
代碼塊:一個模塊, 一個函數(shù), 一個類, 一個文件等都是一個代碼塊;
交互方式:在 cmd 中進入 Python 解釋器里面,輸入的每一條命令都是一個代碼塊;

Python 在執(zhí)行同一個代碼塊的初始化對象的命令時,會檢查其值是否存在,如果存在,會將其重用;
滿足代碼塊的緩存機制則它們在內(nèi)存中只存在一個,即:id相同;
代碼塊的緩存機制的適用范圍: int(float),str,bool;

int(float): 任何數(shù)字在同一代碼塊下都會復用;
bool: True 和 False 在字典中會以 1,0 方式存在,并且復用;
str:同一代碼塊中,值相同的字符串在內(nèi)存中只存在一個:

s1 = 'janes@!#*ewq'
s2 = 'janes@!#*ewq'
print(s1 is s2)	 # True 

a1 = 'janes45613256132!@#$%#^%@$%' * 1
b1 = 'janes45613256132!@#$%#^%@$%' * 1
print(a1 is b1) # True

s1 = 'hah_' * 6
s2 = 'hah_' * 6
print(s1 is s2) # True

2.小數(shù)據(jù)池

Python 自動將 -5~256 的整數(shù)進行了緩存,當你將這些整數(shù)賦值給變量時,并不會重新創(chuàng)建對象,而是使用已經(jīng)創(chuàng)建好的緩存對象;
Python會將滿足一定規(guī)則的字符串在字符串駐留池中,創(chuàng)建一份,當你將這些字符串賦值給變量時,并不會重新創(chuàng)建對象, 而是使用在字符串駐留池中創(chuàng)建好的對象;
bool 值就是 True,F(xiàn)alse,無論你創(chuàng)建多少個變量指向 True,F(xiàn)alse,它在內(nèi)存中都只存在一個;

小數(shù)據(jù)池也是只針對 int(float),str,bool;
小數(shù)據(jù)池是針對不同代碼塊之間的緩存機制;

# cmd, -5~256 的小整數(shù)雖然不在同一代碼塊中, 但是它們適用小數(shù)據(jù)池機制
>>>a = 245
>>>b = 245
>>>a is b # True
# 長度為0與1的字符串一定會被駐留;
# 字符串駐留發(fā)生在程序編譯時;
# 被駐留的字符串必須由 ASCll字母, 數(shù)字以及下劃線組成;
>>>s1 = '@'
>>>s2 = '@'
>>>s1 is s2 # True

>>>s1 = ''
>>>s2 = ''
>>>s1 is s2 # True

>>>s1 = 'a_b_c'
>>>s2 = 'a_b_c'
>>>s1 is s2 # True

>>>s1 = 'a b_c'
>>>s2 = 'a b_c'
>>>s1 is s2 # False

>>>s1 = 'a_b_c' * 1
>>>s2 = 'a_b_c' * 1
>>>s1 is s2 # True

>>>s1 = 'abd_d23' * 3
>>>s2 = 'abd_d23' * 3
>>>s1 is s2 # True

>>>a, b = "some_thing!", "some_thing!"
>>>a is b # False

>>>a, b = "some_thing", "some_thing"
>>>a is b # True
a1 = 1000
b1 = 1000
a1 is b1 # True

class C1(object): 
   a = 100
   b = 100
   c = 1000
   d = 1000
 
 
class C2(object):
   a = 100
   b = 1000

print(C1.a is C1.b)  # True
print(C1.a is C2.a)  # True
print(C1.c is C1.d)  # True
print(C1.c is C2.b)  # False

3.優(yōu)缺點

優(yōu)點:值相同的字符串的(比如標識符),直接從池里拿來用,避免頻繁的創(chuàng)建和銷毀,提升效率,節(jié)約內(nèi)存;

缺點:拼接字符串、對字符串修改之類的影響性能;
因為是不可變的,所以對字符串修改不是 inplace 就地操作,要新建對象,這也是為什么拼接多字符串的時候不建議用 + 而用 join();
join() 是先計算出所有字符串的長度,然后一一拷貝,只 new 一次對象;

小整數(shù)對象池

為避免整數(shù)頻繁申請和銷毀內(nèi)存空間,python 使用了小整數(shù)對象池,Python 對小整數(shù)的定義是 [-5, 256] ,這些整數(shù)對象是提前建立好的,不會被垃圾回收;
一個 Python 程序中,無論這個整數(shù)處于 LEGB 中哪個位置,所有位于這個范圍內(nèi)的整數(shù)使用的都是同一個對象;

# 3.7.5, ipython7.18.1
a = -5
b = -5
a is b # True

a = -6
b = -6
a is b # False

a = 256
b = 256
a is b # True

a = 257
b = 257
a is b # Flase

大整數(shù)對象池

cmd 終端中,大整數(shù)每賦值一次,每次的大整數(shù)都會重新創(chuàng)建,Pycharm 中,每次運行時,所有代碼都加載到內(nèi)存中,屬于一個整體,所以這個時候會有一個大整數(shù)對象池處于一個代碼塊的大整數(shù)是同一個對象;
c 和 d 處于一個代碼塊,而 C1.b 和 C2.b 分別有自己的代碼塊,所以不相等;

# cmd 終端
a = 1000
b = 1000
a is b # False
--------------------
class C1(object): 
   a = 100
   b = 100
   c = 1000
   d = 1000
 
 
class C2(object):
   a = 100
   b = 1000

print(C1.a is C1.b)  # True
print(C1.a is C2.a)  # True
print(C1.c is C1.d)  # True ?? 難道 cmd 中也有大整數(shù)池 ?? 類加載的時候是在一塊內(nèi)存中,同值同地址 ?? 
print(C1.c is C2.b)  # False

# pycharm 等編輯器中
a = 1000
b = 1000
a is b # True
--------------------
class C1(object): 
   a = 100
   b = 100
   c = 1000
   d = 1000
 
 
class C2(object):
   a = 100
   b = 1000

print(C1.a is C1.b)  # True
print(C1.a is C2.a)  # True
print(C1.c is C1.d)  # True
print(C1.c is C2.b)  # False

字符串駐留機制

  Python 解釋器為了提高字符串使用的效率和使用性能,編譯時,使用了 intern(字符串駐留)技術(shù)來提高字符串效率,什么是 intern 機制?即值同樣的字符串對象僅僅會保存一份,放在一個字符串儲蓄池中,是共用的,當然,肯定不能改變,這也決定了字符串必須是不可變對象(整數(shù)類型也是不可變對象)??,浮點數(shù)就不行 ;

簡單原理:

  實現(xiàn) Intern 保留機制的方式非常簡單,就是通過維護一個字符串儲蓄池,這個池子是一個字典結(jié)構(gòu),編譯時,如果字符串已經(jīng)存在于池子中就不再去創(chuàng)建新的字符串,直接返回之前創(chuàng)建好的字符串對象,如果之前還沒有加入到該池子中,則先構(gòu)造一個字符串對象,并把這個對象加入到池子中去,方便下一次獲取。;
  但是,解釋器內(nèi)部對intern 機制的使用策略是有考究的,有些場景會自動使用 intern ,有些地方需要通過手動方式才能啟動,看下面幾個常見情景:

# cmd 中浮點數(shù)沒有被緩存
a = 1.0
b = 1.0
a is b # False

# cmd 中并非全部的字符串都會采用intern機制; 僅 包括下劃線、數(shù)字、字母的字符串才會被 intern--類標識符
s1="hello"
s2="hello"
s1 is s2 # True

# 如果有空格,默認不啟用intern機制
s1="hell o"
s2="hell o"
s1 is s2 # False

s1 = "hell!*o"
s2 = "hell!*o"
print(s1 is s2) # False

# 如果一個字符串長度超過20個字符,不啟動intern機制 -- 看網(wǎng)上很多都是這么寫的, 不超過二十個就為真,但是我在自己 3.7/8.5 版本上試了一下,發(fā)現(xiàn)好像沒有限制,不知道是 Python 更新了,還是什么問題……
s1 = "a" * 20
s2 = "a" * 20
s1 is s2 # True

s1 = "a" * 21
s2 = "a" * 21
s1 is s2 # True

s1 = "ab" * 10
s2 = "ab" * 10
s1 is s2 # True

s1 = "ab" * 11
s2 = "ab" * 11
s1 is s2 # True

# 'kz' + 'c' 編譯時已經(jīng)變成 'kzc',而 s1 + 'c' 中 s1 是變量, 會在運行時進行拼接,所以沒有被intern?
'kz' + 'c' is 'kzc' # True

s1 = 'kz'
s2 = 'kzc'
s1+'c' is 'kzc' # False

# pycharm 等編輯器中,只要是同一個字符串,都為 True,并不用是下劃線、數(shù)字、字母的字符串
s1 = "hell o"
s2 = "hell o"
print(s1 is s2) # True

s1 = "hell!*o"
s2 = "hell!*o"
print(s1 is s2) # True

s1 = "a" * 20
s2 = "a" * 20
print(s1 is s2) # True

s1 = "a" * 21
s2 = "a" * 21
print(s1 is s2) # True

s1 = "ab" * 10
s2 = "ab" * 10
print(s1 is s2) # True

s1 = "ab" * 11
s2 = "ab" * 11
print(s1 is s2) # True

'kz' + 'c' is 'kzc' # True

s1 = 'kz'
s2 = 'kzc'
s1+'c' is 'kzc' # False

# 編輯器中,float 也被緩存了
a = 1.0
b = 1.0
a is b

以上就是詳解Python 小數(shù)據(jù)池和代碼塊緩存機制的詳細內(nèi)容,更多關(guān)于Python 小數(shù)據(jù)池和代碼塊緩存機制的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python爬蟲構(gòu)建代理ip池抓取數(shù)據(jù)庫的示例代碼
  • python多線程+代理池爬取天天基金網(wǎng)、股票數(shù)據(jù)過程解析
  • Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解
  • Python實現(xiàn)Mysql數(shù)據(jù)庫連接池實例詳解
  • Python代碼塊及緩存機制原理詳解

標簽:江蘇 衡水 湖州 呼和浩特 畢節(jié) 中山 股票 駐馬店

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解Python小數(shù)據(jù)池和代碼塊緩存機制》,本文關(guān)鍵詞  詳解,Python,小,數(shù)據(jù),池,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Python小數(shù)據(jù)池和代碼塊緩存機制》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Python小數(shù)據(jù)池和代碼塊緩存機制的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    天堂久久久久va久久久久| 久久九九国产精品| 99久久精品免费精品国产| 激情综合五月婷婷| 久久99蜜桃精品| 国产在线一区二区| 国产精品主播直播| 粉嫩一区二区三区在线看| 国产高清精品网站| 成人午夜短视频| 成人网在线免费视频| 成人av资源站| 色综合中文字幕国产 | 日韩综合在线视频| 亚洲国产精品久久人人爱蜜臀 | 日韩高清在线一区| 日韩电影一区二区三区四区| 麻豆中文一区二区| 国产丶欧美丶日本不卡视频| 成人app下载| 色综合色综合色综合色综合色综合 | 精品欧美一区二区三区精品久久| 欧美成人vr18sexvr| 国产喷白浆一区二区三区| 中文字幕欧美一区| 亚洲最大色网站| 精品制服美女久久| 91丨九色丨尤物| 在线综合视频播放| 中文字幕乱码久久午夜不卡| 一区二区三区在线看| 免费看精品久久片| 成人在线综合网站| 欧美精品精品一区| 国产亚洲精品aa| 亚洲大片精品永久免费| 国产老妇另类xxxxx| 色先锋资源久久综合| 精品久久久久一区| 樱桃视频在线观看一区| 久久97超碰国产精品超碰| 91网站最新地址| 精品日韩在线观看| 亚洲国产精品一区二区久久| 丰满岳乱妇一区二区三区| 欧美日韩亚洲另类| 国产精品网曝门| 老司机免费视频一区二区| 一本到一区二区三区| 2024国产精品| 亚洲一区二区精品3399| 从欧美一区二区三区| 日韩欧美自拍偷拍| 亚洲一区影音先锋| 精品影院一区二区久久久| 欧美图片一区二区三区| 国产精品国产三级国产有无不卡 | 精品国产第一区二区三区观看体验| 亚洲欧洲三级电影| 国产麻豆精品95视频| 欧美欧美欧美欧美| 一区二区三区国产精品| 成人美女视频在线观看18| 亚洲精品一区二区在线观看| 日韩专区一卡二卡| 欧美视频精品在线| 亚洲狠狠丁香婷婷综合久久久| 成人精品视频一区二区三区| 久久婷婷综合激情| 蜜桃视频在线观看一区二区| 欧美日韩午夜精品| 亚洲高清免费观看| 欧美性大战久久久久久久| 亚洲精品欧美激情| 色婷婷激情一区二区三区| 成人欧美一区二区三区小说| 成人app网站| 一区视频在线播放| 一本在线高清不卡dvd| 亚洲人成伊人成综合网小说| 91麻豆国产福利精品| 樱花影视一区二区| 欧美日韩国产高清一区| 日本欧美韩国一区三区| 日韩女优av电影在线观看| 老司机免费视频一区二区三区| 亚洲精品一区在线观看| 国产69精品久久久久毛片| 国产精品高清亚洲| 色狠狠桃花综合| 丝袜美腿成人在线| 精品嫩草影院久久| 国产91露脸合集magnet| 亚洲精品你懂的| 欧美一区二区在线不卡| 国产一区二区三区久久悠悠色av| 久久综合九色综合97_久久久| 成人爽a毛片一区二区免费| 亚洲精品ww久久久久久p站| 欧美丝袜丝nylons| 老司机免费视频一区二区三区| 国产精品污网站| 欧美主播一区二区三区| 日本午夜一区二区| 久久青草欧美一区二区三区| gogogo免费视频观看亚洲一| 亚洲国产aⅴ成人精品无吗| 欧美成人女星排名| www.av精品| 日本91福利区| 国产精品卡一卡二| 7777精品伊人久久久大香线蕉 | 在线观看日韩一区| 美国欧美日韩国产在线播放| 国产精品免费丝袜| 91精品欧美久久久久久动漫 | 欧美一三区三区四区免费在线看| 国产尤物一区二区在线| 亚洲精品五月天| 精品捆绑美女sm三区| 91色在线porny| 精品一区二区三区视频在线观看| 亚洲人成网站精品片在线观看| 日韩免费视频一区二区| 色乱码一区二区三区88| 国产精品一二三四| 日韩国产精品91| 亚洲一区二区三区四区在线免费观看| 精品久久久久久无| 欧美精品久久一区二区三区 | 亚洲国产精品久久人人爱| 国产亚洲人成网站| 91精品国产一区二区人妖| 欧美精品在线一区二区| 国产精品白丝av| 日韩av一区二| 一区二区三区色| 国产精品久久久久久福利一牛影视 | 国产在线视视频有精品| 偷拍自拍另类欧美| 亚洲美女偷拍久久| 国产精品久久久久影院老司| 久久综合99re88久久爱| 欧美成人vps| 日韩免费一区二区| 欧美哺乳videos| 欧美丝袜自拍制服另类| 在线观看视频一区二区| 91视频你懂的| 色综合婷婷久久| 色乱码一区二区三区88| 91麻豆国产在线观看| 94-欧美-setu| 色婷婷精品久久二区二区蜜臀av| 91在线无精精品入口| 99久久伊人精品| 色综合色综合色综合色综合色综合 | 国产日韩欧美麻豆| 久久久蜜桃精品| 久久久美女艺术照精彩视频福利播放| 久久这里只精品最新地址| 久久久精品中文字幕麻豆发布| 久久精品人人做人人爽人人| 欧美国产乱子伦| 18欧美亚洲精品| 一区二区成人在线| 日韩影院免费视频| 久久av中文字幕片| 国产乱国产乱300精品| 成人午夜免费电影| 色先锋aa成人| 7777精品久久久大香线蕉 | 精品在线免费视频| 国产精品996| 99久久国产免费看| 欧美三级电影网| 日韩精品一区二区三区在线观看| 精品国产欧美一区二区| 欧美国产日韩一二三区| 亚洲激情五月婷婷| 日韩成人午夜电影| 成人午夜视频在线| 欧美精品亚洲二区| 久久这里只有精品首页| 国产精品久久久久久久久免费相片 | 国产精品传媒在线| 亚洲国产精品影院| 国产麻豆精品视频| 欧美丝袜自拍制服另类| 久久男人中文字幕资源站| 亚洲欧美在线另类| 日日夜夜一区二区| 成人妖精视频yjsp地址| 欧美日本一区二区三区| 国产欧美一区二区精品仙草咪| 亚洲国产日韩a在线播放性色| 国产一级精品在线| 欧美日韩一区高清| 中文成人综合网| 久久狠狠亚洲综合|