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

淺析Python中字符串的intern機制

 更新時間:2020年10月03日 12:10:06   作者:NobitaChen  
這篇文章主要介紹了Python中字符串的intern機制,幫助大家更好的理解和學習python,感興趣的朋友可以了解下

intern機制:

  字符串類型作為Python中最常用的數(shù)據(jù)類型之一,Python解釋器為了提高字符串使用的效率和使用性能,做了很多優(yōu)化,例如:Python解釋器中使用了 intern(字符串駐留)的技術(shù)來提高字符串效率,什么是intern機制?即值同樣的字符串對象僅僅會保存一份,放在一個字符串儲蓄池中,是共用的,當然,肯定不能改變,這也決定了字符串必須是不可變對象。

簡單原理:

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

但是,解釋器內(nèi)部對intern 機制的使用策略是有考究的,有些場景會自動使用intern ,有些地方需要通過手動方式才能啟動,看下面幾個常見的小陷阱。

  • 1.在shell中示例,并非全部的字符串都會采用intern機制。僅僅包括下劃線、數(shù)字、字母的字符串才會被intern,當然不能超過20個字符。因為如果超過20個字符的話,解釋器認為這個字符串不常用,不用放入字符串池中。
>>> s1="hello"
>>> s2="hello"
>>> s1 is s2
True# 如果有空格,默認不啟用intern機制
>>> s1="hell o"
>>> s2="hell o"
>>> s1 is s2
False# 如果一個字符串長度超過20個字符,不啟動intern機制
>>> s1 = "a" * 20
>>> s2 = "a" * 20
>>> s1 is s2
True
>>> s1 = "a" * 21
>>> s2 = "a" * 21
>>> s1 is s2
False
>>> s1 = "ab" * 10
>>> s2 = "ab" * 10
>>> s1 is s2
True
>>> s1 = "ab" * 11
>>> s2 = "ab" * 11
>>> s1 is s2
False
  • 2.但是在PyCharm中,只要是同一個字符串不超過20個字符,都為True,并不用是下劃線、數(shù)字、字母的字符串。個人理解:IDE支持的不好。
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) # False
s1 = "ab" * 10
s2 = "ab" * 10
print(s1 is s2) # True
s1 = "ab" * 11
s2 = "ab" * 11
print(s1 is s2) # False
  • 3.字符串拼接時,涉及編譯運行問題
>>> s1 = "hell"
>>> s2 = "hello"
>>> s1 + "o" is s2
False
>>> "hell" + "o" is s2
True
>>>
# 說明shell和IDE在這方面沒有差異
s1 = "hell"
s2 = "hello"
print(s1 + "o" is s2) # False
print("hell" + "o" is s2) # True#因為"hell" + "o"在編譯時已經(jīng)變成了"hello",而s1+"o"因為s1是一個變量,他們會在運行時進行拼接,所以沒有被intern

作者:Nobita Chen
出處:http://www.cnblogs.com/chenshengkai/

以上就是淺析Python中字符串的intern機制的詳細內(nèi)容,更多關(guān)于python 字符串的intern機制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進行文本匹配操作

    Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進行文本匹配操作

    這篇文章主要介紹了Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進行文本匹配操作,涉及Python使用str.startswith()和str.endswith()方法針對字符串開始或結(jié)尾處特定文本匹配操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-04-04
  • python使用RNN實現(xiàn)文本分類

    python使用RNN實現(xiàn)文本分類

    這篇文章主要為大家詳細介紹了python使用RNN進行文本分類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Kears+Opencv實現(xiàn)簡單人臉識別

    Kears+Opencv實現(xiàn)簡單人臉識別

    這篇文章主要為大家詳細介紹了Kears+Opencv實現(xiàn)簡單人臉識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • python實現(xiàn)rar解壓和壓縮的方法(附源碼)

    python實現(xiàn)rar解壓和壓縮的方法(附源碼)

    數(shù)據(jù)量現(xiàn)在越來越大,壓縮文件在日常生活中很常用,這篇文章主要給大家介紹了關(guān)于python實現(xiàn)rar解壓和壓縮的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 詳解用TensorFlow實現(xiàn)邏輯回歸算法

    詳解用TensorFlow實現(xiàn)邏輯回歸算法

    本篇文章主要介紹了詳解用TensorFlow實現(xiàn)邏輯回歸算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Django websocket原理及功能實現(xiàn)代碼

    Django websocket原理及功能實現(xiàn)代碼

    這篇文章主要介紹了Django websocket原理及功能實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python 輸出詳細的異常信息(traceback)方式

    Python 輸出詳細的異常信息(traceback)方式

    這篇文章主要介紹了Python 輸出詳細的異常信息(traceback)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python中的斷言(assert語句)

    python中的斷言(assert語句)

    這篇文章主要介紹了python中的斷言(assert語句),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python tornado獲取請求參數(shù)的方法

    python tornado獲取請求參數(shù)的方法

    在Tornado框架中,獲取請求參數(shù)包括查詢字符串參數(shù)、表單數(shù)據(jù)和JSON數(shù)據(jù)等,JSON數(shù)據(jù)通過直接訪問self.request.json獲取,正確處理這些數(shù)據(jù)需要注意請求的Content-Type和數(shù)據(jù)格式,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • PyCharm2018 安裝及破解方法實現(xiàn)步驟

    PyCharm2018 安裝及破解方法實現(xiàn)步驟

    這篇文章主要介紹了PyCharm2018 安裝及破解方法實現(xiàn)步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-09-09

最新評論