欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python字符串Intern機制詳解

 更新時間:2019年07月01日 09:09:54   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了python字符串Intern機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

字符串在 Python 中是最簡單也是最常用的數(shù)據(jù)類型之一,在 CPython 中字符串的實現(xiàn)原理使用了一種叫做 Intern(字符串駐留)的技術(shù)來提高字符串效率。究竟什么是 intern 機制,這種機制又是通過什么方式來提高字符串效率的呢?希望這篇文章能夠拋磚引玉。

先來看一段代碼:

>>> s3 = "hello!"
>>> s4 = "hello!"
>>> s3 is s4
False
>>> id(s3)
80325968L
>>> id(s4)
80326048L

s3 和 s4 雖然值是一樣的,但確確實實是兩個不同的字符串對象,Python 會為它們倆各自分配一段內(nèi)存空間,假設(shè)程序中存在大量值相同的字符串,系統(tǒng)就不得不為每個字符串重復(fù)地分配內(nèi)存空間,顯然,對系統(tǒng)來說是一種無謂的資源浪費。為了解決這種問題,Python 引入了 intern 機制。

再來看:

>>> s3 = intern('hello!')
>>> s4 = intern('hello!')
>>> s3 is s4
True
>>> id(s3)
80325968L
>>> id(s4)
80325968L

intern 是 Python 中的一個內(nèi)建函數(shù),該函數(shù)的作用就是對字符串進行 intern 機制處理,處理后返回字符串對象。我們發(fā)現(xiàn)但凡是值相同的字符串經(jīng)過 intern 機制處理之后,返回的都是同一個字符串對象,這種方式在處理大數(shù)據(jù)的時候無疑能節(jié)省更多的內(nèi)存空間,系統(tǒng)無需為相同的字符串重復(fù)分配內(nèi)存,對于值相同的字符串共用一個對象即可。

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

intern_pool = {}
def intern(s):
if s in intern_pool:
return intern_pool[s]
else:
obj = PyStringObject(s)
intern_pool[s] = obj
return obj

在主流面向?qū)ο蟮木幊陶Z言中intern 機制對于處理字符串已經(jīng)成為一種標(biāo)配,通過 intern 機制可以提高字符串的處理效率,當(dāng)然,解釋器內(nèi)部很對 intern 機制的使用策略是有考究的,有些場景會自動使用 intern ,有些地方需要通過手動方式才能啟動。比如:

>>> s1 = "hello"
>>> s2 = "hello"
>>> s1 is s2
True
>>> id(s1)
72320704L
>>> id(s2)
72320704L

這段代碼就是 Python自動使用了intern機制的結(jié)果。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

  • Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能示例

    Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能示例

    這篇文章主要介紹了Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能,涉及Python針對網(wǎng)頁的獲取、字符串正則判定等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python圖像特效之模糊玻璃效果

    Python圖像特效之模糊玻璃效果

    這篇文章主要為大家詳細介紹了Python圖像特效之模糊玻璃效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python?包實現(xiàn)JSON?輕量數(shù)據(jù)操作

    python?包實現(xiàn)JSON?輕量數(shù)據(jù)操作

    這篇文章主要介紹了python?包實現(xiàn)JSON?輕量數(shù)據(jù)操作,文章介紹內(nèi)容首先將對象轉(zhuǎn)為json字符串展開主題詳細內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Python編程使用PyQt5制作動態(tài)鐘表示例

    Python編程使用PyQt5制作動態(tài)鐘表示例

    本篇文章將用 Python 同時繪制兩種類型的表;一個是上面提到的含有時、分、秒針的鐘表(為了方便,下面統(tǒng)稱為老式鐘表),一個是電子表,最終運行效果文中如下呈現(xiàn)
    2021-10-10
  • Python tkinter制作單機五子棋游戲

    Python tkinter制作單機五子棋游戲

    這篇文章主要介紹了Python tkinter制作單機五子棋游戲,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 人工神經(jīng)網(wǎng)絡(luò)算法知識點總結(jié)

    人工神經(jīng)網(wǎng)絡(luò)算法知識點總結(jié)

    在本篇內(nèi)容里小編給大家分享了人工神經(jīng)網(wǎng)絡(luò)算法的相關(guān)知識點以及原理介紹,需要的朋友們參考下。
    2019-06-06
  • Python數(shù)據(jù)可視化Pyecharts庫實現(xiàn)桑葚圖效果

    Python數(shù)據(jù)可視化Pyecharts庫實現(xiàn)桑葚圖效果

    這篇文章主要介紹了Python數(shù)據(jù)可視化如何使用Pyecharts庫來實現(xiàn)桑葚圖效果圖,文中給出實現(xiàn)的示例代碼,有需要的朋友可以借鑒參考想,希望能夠有所幫助
    2021-09-09
  • python將二維數(shù)組升為一維數(shù)組或二維降為一維方法實例

    python將二維數(shù)組升為一維數(shù)組或二維降為一維方法實例

    在實際應(yīng)用的過程中,遇到列表或是數(shù)組的維數(shù)不同,需要變換的問題,如二維列表/數(shù)組變成了一維列表/數(shù)組,下面這篇文章主要給大家介紹了關(guān)于python將二維數(shù)組升為一維數(shù)組或二維降為一維的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 利用Hyperic調(diào)用Python實現(xiàn)進程守護

    利用Hyperic調(diào)用Python實現(xiàn)進程守護

    這篇文章主要為大家詳細介紹了利用Hyperic調(diào)用Python實現(xiàn)進程守護,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 最新評論