婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

前言

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

總結(jié):

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

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

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

1.代碼塊的緩存機(jī)制

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

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

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

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

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

# cmd, -5~256 的小整數(shù)雖然不在同一代碼塊中, 但是它們適用小數(shù)據(jù)池機(jī)制
>>>a = 245
>>>b = 245
>>>a is b # True
# 長(zhǎng)度為0與1的字符串一定會(huì)被駐留;
# 字符串駐留發(fā)生在程序編譯時(shí);
# 被駐留的字符串必須由 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)缺點(diǎn)

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

缺點(diǎn):拼接字符串、對(duì)字符串修改之類(lèi)的影響性能;
因?yàn)槭遣豢勺兊模詫?duì)字符串修改不是 inplace 就地操作,要新建對(duì)象,這也是為什么拼接多字符串的時(shí)候不建議用 + 而用 join();
join() 是先計(jì)算出所有字符串的長(zhǎng)度,然后一一拷貝,只 new 一次對(duì)象;

小整數(shù)對(duì)象池

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

# 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ù)對(duì)象池

cmd 終端中,大整數(shù)每賦值一次,每次的大整數(shù)都會(huì)重新創(chuàng)建,Pycharm 中,每次運(yùn)行時(shí),所有代碼都加載到內(nèi)存中,屬于一個(gè)整體,所以這個(gè)時(shí)候會(huì)有一個(gè)大整數(shù)對(duì)象池處于一個(gè)代碼塊的大整數(shù)是同一個(gè)對(duì)象;
c 和 d 處于一個(gè)代碼塊,而 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ù)池 ?? 類(lèi)加載的時(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

字符串駐留機(jī)制

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

簡(jiǎn)單原理:

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

# cmd 中浮點(diǎn)數(shù)沒(méi)有被緩存
a = 1.0
b = 1.0
a is b # False

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

# 如果有空格,默認(rèn)不啟用intern機(jī)制
s1="hell o"
s2="hell o"
s1 is s2 # False

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

# 如果一個(gè)字符串長(zhǎng)度超過(guò)20個(gè)字符,不啟動(dòng)intern機(jī)制 -- 看網(wǎng)上很多都是這么寫(xiě)的, 不超過(guò)二十個(gè)就為真,但是我在自己 3.7/8.5 版本上試了一下,發(fā)現(xiàn)好像沒(méi)有限制,不知道是 Python 更新了,還是什么問(wèn)題……
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' 編譯時(shí)已經(jīng)變成 'kzc',而 s1 + 'c' 中 s1 是變量, 會(huì)在運(yùn)行時(shí)進(jìn)行拼接,所以沒(méi)有被intern?
'kz' + 'c' is 'kzc' # True

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

# pycharm 等編輯器中,只要是同一個(gè)字符串,都為 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ù)池和代碼塊緩存機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于Python 小數(shù)據(jù)池和代碼塊緩存機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Python小數(shù)據(jù)池和代碼塊緩存機(jī)制》,本文關(guān)鍵詞  詳解,Python,小,數(shù)據(jù),池,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Python小數(shù)據(jù)池和代碼塊緩存機(jī)制》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于詳解Python小數(shù)據(jù)池和代碼塊緩存機(jī)制的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美岛国在线观看| 久久影院视频免费| 亚洲免费看黄网站| 精品噜噜噜噜久久久久久久久试看 | 91精品综合久久久久久| 成人免费毛片app| 日本欧美肥老太交大片| 国产精品污污网站在线观看| 日韩精品一区二区三区三区免费| 欧美亚洲日本一区| av电影一区二区| 三级影片在线观看欧美日韩一区二区| 亚洲综合自拍偷拍| 国产成人免费xxxxxxxx| 日韩国产一区二| 日韩精品成人一区二区在线| 亚洲午夜久久久久久久久电影网| 中文字幕日本不卡| 亚洲黄色录像片| 性久久久久久久久久久久| 日韩高清一区二区| 日日摸夜夜添夜夜添亚洲女人| 三级久久三级久久久| 男女男精品网站| 成人性生交大片免费看中文| 91视频免费观看| 欧美乱熟臀69xxxxxx| 精品欧美乱码久久久久久| 精品久久久三级丝袜| 2023国产精品自拍| 亚洲美腿欧美偷拍| 五月婷婷久久丁香| 国产一区二区精品久久| 色国产综合视频| 精品国免费一区二区三区| 国产精品久久三区| 日韩av网站免费在线| 国产成人免费av在线| 欧美军同video69gay| 国产亚洲精品久| 午夜激情一区二区| 成人福利视频在线| 欧美高清激情brazzers| 自拍偷拍亚洲综合| 精品一区精品二区高清| 精品视频一区三区九区| 国产欧美一区二区在线| 日韩国产成人精品| 91在线视频在线| 国产女主播一区| 日韩高清不卡一区二区三区| 91一区在线观看| 国产蜜臀av在线一区二区三区| 免费的国产精品| 欧美日韩欧美一区二区| 亚洲免费伊人电影| 91片黄在线观看| 国产三级一区二区| 狠狠色综合色综合网络| 精品国产亚洲在线| 日本va欧美va精品| 欧美成人a∨高清免费观看| 亚州成人在线电影| 欧美一级二级在线观看| 男人的天堂亚洲一区| 精品免费视频一区二区| 麻豆精品一区二区三区| 日韩一级免费一区| 国产麻豆精品在线观看| 欧美国产欧美综合| 99免费精品视频| 亚洲电影欧美电影有声小说| 欧美色网一区二区| 激情六月婷婷久久| 国产精品二三区| 欧美男人的天堂一二区| 美国精品在线观看| 欧美国产日本视频| 精品视频123区在线观看| 精品在线播放午夜| 亚洲不卡在线观看| 久久综合999| 美女网站色91| 美女尤物国产一区| 精品成人一区二区| 在线精品视频一区二区三四| 蜜桃av噜噜一区二区三区小说| 国产色爱av资源综合区| 欧美日韩视频第一区| 99精品桃花视频在线观看| 日韩有码一区二区三区| 日韩伦理免费电影| 久久久久国产精品麻豆| 91麻豆精品91久久久久久清纯| 99久久综合国产精品| 国产在线精品一区二区不卡了| 亚洲午夜av在线| 亚洲丝袜自拍清纯另类| 国产丝袜美腿一区二区三区| 日韩欧美一级特黄在线播放| 91美女片黄在线观看91美女| 国产不卡高清在线观看视频| 麻豆成人91精品二区三区| 亚洲成av人片在线观看无码| 亚洲人成网站色在线观看| 国产精品免费久久久久| 国产网站一区二区| 久久女同性恋中文字幕| 精品美女被调教视频大全网站| 欧美日韩免费一区二区三区| 欧美日韩免费在线视频| 91精品欧美一区二区三区综合在| 欧美日韩国产首页在线观看| 欧美午夜免费电影| 欧美久久一二区| 欧美变态tickling挠脚心| 9191久久久久久久久久久| 欧美无砖砖区免费| 日韩一区二区电影| 欧美一区二区三区在线观看视频| 91在线精品一区二区| 欧美日韩日本视频| 久久久久久久久97黄色工厂| 国产精品乱人伦中文| 亚洲最色的网站| 久久99国产精品麻豆| 成人午夜免费电影| 欧美日本不卡视频| 中文字幕av一区 二区| 亚洲成av人影院| 成人免费毛片a| 成人高清视频免费观看| 欧美一级理论片| 亚洲精品欧美激情| 精品中文字幕一区二区| 色婷婷亚洲精品| 久久久久久久av麻豆果冻| 亚洲国产毛片aaaaa无费看| 国内国产精品久久| 精品视频999| 国产精品久久久久一区二区三区| 裸体健美xxxx欧美裸体表演| 色综合久久久久综合99| 欧美激情在线免费观看| 久久精品国产一区二区三区免费看 | 狠狠色伊人亚洲综合成人| 欧美日韩在线免费视频| 一区二区三区高清在线| 91免费小视频| 亚洲综合另类小说| 91麻豆123| 夜夜嗨av一区二区三区网页| 91成人在线精品| 午夜伊人狠狠久久| 7777精品伊人久久久大香线蕉| 日本怡春院一区二区| 日韩欧美综合在线| 国内精品在线播放| 国产亚洲精品久| 一本大道av伊人久久综合| 亚洲精品成人精品456| 99久久er热在这里只有精品66| 久久人人超碰精品| 中文文精品字幕一区二区| 国产精品一区二区不卡| 26uuu亚洲综合色欧美 | 欧美大片国产精品| 久久精品噜噜噜成人av农村| 精品日产卡一卡二卡麻豆| 丰满岳乱妇一区二区三区| 亚洲精品视频自拍| 欧美一区二区久久| 成人动漫一区二区三区| 午夜精品123| 国产亚洲成aⅴ人片在线观看| 色av一区二区| 从欧美一区二区三区| 午夜精品福利一区二区蜜股av| 国产亚洲一区字幕| 欧美一二三在线| 欧美午夜精品一区二区三区| 国产精品一品视频| 五月综合激情网| 亚洲精品乱码久久久久久黑人 | 国产欧美一区二区精品性| 欧美视频完全免费看| 精久久久久久久久久久| 亚洲尤物视频在线| **欧美大码日韩| 国产欧美日韩精品a在线观看| 欧美日本韩国一区| 欧美写真视频网站| 欧美性猛交一区二区三区精品| 99re热这里只有精品免费视频| 国产乱人伦偷精品视频不卡| 视频在线在亚洲| 日韩不卡一二三区| 免费久久99精品国产| 免费观看一级欧美片| 天堂蜜桃91精品|