python之快取機制

2022-07-11 15:00:18 字數 3891 閱讀 4908

s = 100

s1 = 'alex'

s2 = 'alex'

print(id(s),id(s1),id(s2))

print(s1 == s2)

print(s1 is s2)
python程式是由**塊構造的

前提條件:在同乙個**塊中

機制內容:python在執行同乙個**塊的初始化物件的命令是,會檢查是否其值已經存在,如果存在,會將其重用。換句話說:執行同乙個**塊時,遇到初始化物件的命令時,他會將初始化的這個變數與值存在乙個字典中,在遇到新的變數時,會現在字典中查詢記錄,如果有同樣的記錄那麼它會重複使用這個字典中的之前的這個值。所以在你給出的例子中,檔案執行時(同乙個**塊)會把i1,i2兩個變數指向同乙個物件,滿足快取機制則他們在記憶體中只存在乙個,即:id相同

適用物件:int(float),str,bool

物件的具體細則:(了解)

int(float):任何數字在同一**塊下都會復用

bool:true和false在字典中會以1,0方式存在,並且復用

str:幾乎鄋的字串都符合快取機制,具體規定如下(了解即可):

1、非乘法得到的字串都滿足**塊的快取機制:

1 s1 = 'taibai@!ewq'

2 s2 = 'taibai@!ewq'

3 4 print(s1 is s2) #true

2. 乘法得到的字串分兩種情況

1     # 2.1 乘數為1時,任何字串滿足**塊的快取機制

2 b1 = 'taibaijkfdajljfkajflkaj' * 1

3 b2 = 'taibaijkfdajljfkajflkaj' * 1

4 5 print(b1 is b2) #true

6 7 # 2.2 乘數》=2時,僅含大小寫字母,數字,下劃線,總長度<=20,滿足**塊的快取機制

8 s1 = 'zy_' * 3

9 s2 = 'zy_' * 3

10 11 print(s1 is s2) #true

優點:節省記憶體,提公升效能

前提條件:在不同**塊中

機制內容:

1. -5~256

python自動將-5~256的整數進行了快取,當你將這些整數賦值給變數時,並不會重新建立物件,而是使用已經建立好的快取物件

2. 一定規則的字串

python將一定規則的字串在字串駐留池中建立乙份,當你將這些字串賦值給變數時,並不會重新建立物件,而是使用字串駐留池中建立好的物件

其實,無論是快取還是字串駐留池,都是python做的乙個優化,就是講-5~256的整數和一定規則的字串,放在乙個『池』(容器或字典)中,無論程式中那些變數指向這些範圍內的整數或者字串,那麼它直接在這個『池』中引用,言外之意,就是記憶體中只建立乙個。

適用物件:int(float),str,bool

物件的細則:

str:字串要從下面這幾個大方向討論(了解即可!):

1,字串的長度為0或者1,預設都採用了駐留機制(小資料池)。

2,字串的長度》1,且只含有大小寫字母,數字,下劃線時,才會預設駐留。

3,用乘法得到的字串,分兩種情況。

3.1 乘數為1時:

僅含大小寫字母,數字,下劃線,預設駐留。

含其他字元,長度<=1,預設駐留。

含其他字元,長度》1,預設駐留。

3.2 乘數》=2時:

僅含大小寫字母,數字,下劃線,總長度<=20,預設駐留。

4,指定駐留。

from sys import intern

a = intern('hello!@'*20)

b = intern('hello!@'*20)

print(a is b)

#指定駐留是你可以指定任意的字串加入到小資料池中,讓其只在記憶體中建立乙個物件,多個變數都是指向這乙個字串。

滿足以上字串的規則時,就符合小資料池的概念。

bool值就是true,false,無論你建立多少個變數指向true,false,那麼他在記憶體中只存在乙個。

看一下用了小資料池(駐留機制)的效率有多高:

顯而易見,節省大量內存在字串比較時,非駐留比較效率o(n),駐留時比較效率o(1)。

優點:能夠提高一些字串,整數處理任務在時間和空間上的效能;需要值相同的字串,整數的時候,直接從『池』裡拿來用,避免頻繁的建立和銷毀,提公升效率,節約記憶體

如果在同一**塊下,則採用同一**塊下的換快取機制。

如果是不同**塊,則採用小資料池的駐留機制。

# pycharm 通過執行檔案的方式執行下列**:  這是在同乙個檔案下也就是同一**塊下,採用同一**塊下的快取機制。

i1 = 1000

i2 = 1000

print(i1 is i2) # 結果為true 因為**塊下的快取機制適用於所有數字

通過互動方式中執行下面**:   # 這是不同**塊下,則採用小資料池的駐留機制。

>>> i1 = 1000

>>> i2 = 1000

>>> print(i1 is i2)

false # 不同**塊下的小資料池駐留機制 數字的範圍只是-5~256.

1 # 雖然在同乙個檔案中,但是函式本身就是**塊,所以這是在兩個不同的**塊下,不滿足小資料池(駐存機制),則指向兩個不同的位址。

2 def func():

3 i1 = 1000

4 print(id(i1)) # 2288555806672

5 6 def func2():

7 i1 = 1000

8 print(id(i1)) # 2288557317392

9 10 func()

web快取之 http快取機制

一 web快取可以分為資料庫快取 伺服器快取 瀏覽器快取。二 http快取是通過頭資訊控制快取。a.分為強快取和協商快取兩種。b.強快取如果命中,則不需要和伺服器發生互動。c.協商快取不管是否命中,都要和伺服器發生互動。d.強快取的優先順序高於協商快取。三 強快取。a.可以理解為無需驗證的快取策略。...

Python 快取重用機制

python 緩衝機制是為提高程式執行的效率服務的,實際上就是在 python 直譯器啟動時從記憶體空間中開闢出一 小部分,用來儲存高頻使用的資料,這樣可以大大減少高頻使用的資料建立時申請記憶體和銷毀時撤銷記憶體的開 銷。python 在儲存資料時,會根據資料的讀取頻繁程度以及記憶體占用情況來考慮,...

python的快取機制

剛開始學習python,所以把所學記錄一下 python的快取機制,分為在同一 塊和不同 塊下的區別 塊 乙個模組,乙個函式,乙個類,乙個檔案等都是乙個 塊。例如 if true print 我是if中的 塊 print 我還是if中的 塊 print 我不是if中的 塊了,我和if是平級的 然而在...