最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Python中字符串的intern機(jī)制

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

intern機(jī)制:

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

簡單原理:

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

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

  • 1.在shell中示例,并非全部的字符串都會(huì)采用intern機(jī)制。僅僅包括下劃線、數(shù)字、字母的字符串才會(huì)被intern,當(dāng)然不能超過20個(gè)字符。因?yàn)槿绻^20個(gè)字符的話,解釋器認(rèn)為這個(gè)字符串不常用,不用放入字符串池中。
>>> s1="hello"
>>> s2="hello"
>>> s1 is s2
True# 如果有空格,默認(rèn)不啟用intern機(jī)制
>>> s1="hell o"
>>> s2="hell o"
>>> s1 is s2
False# 如果一個(gè)字符串長度超過20個(gè)字符,不啟動(dòng)intern機(jī)制
>>> 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中,只要是同一個(gè)字符串不超過20個(gè)字符,都為True,并不用是下劃線、數(shù)字、字母的字符串。個(gè)人理解: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.字符串拼接時(shí),涉及編譯運(yùn)行問題
>>> 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#因?yàn)?hell" + "o"在編譯時(shí)已經(jīng)變成了"hello",而s1+"o"因?yàn)閟1是一個(gè)變量,他們會(huì)在運(yùn)行時(shí)進(jìn)行拼接,所以沒有被intern

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

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

相關(guān)文章

最新評(píng)論

泽州县| 米脂县| 株洲县| 栾城县| 突泉县| 达孜县| 连平县| 泾阳县| 贵德县| 广西| 如东县| 闽清县| 寿宁县| 玛曲县| 白河县| 弥勒县| 贺州市| 崇仁县| 陈巴尔虎旗| 祁连县| 庐江县| 泰兴市| 宁海县| 武隆县| 胶州市| 邢台市| 泾川县| 侯马市| 理塘县| 南漳县| 静海县| 尖扎县| 康保县| 桐庐县| 桂平市| 依安县| 贵阳市| 容城县| 萝北县| 海安县| 华安县|