python 字符串的駐留機(jī)制及優(yōu)缺點(diǎn)
說明
字符串駐留是一種僅保存一份相同且不可變字符串的方法。不同的值被存放在字符串駐留池中,發(fā)生駐留之后, 許多變量可能指向內(nèi)存中的相同字符串對象, 從而節(jié)省內(nèi)存.
原理
- 系統(tǒng)維護(hù)interned字典,記錄已被駐留的字符串對象
- 當(dāng)字符串對象a需要駐留時,先在interned檢測是否存在,若存在則指向存在的字符串對象,a的引用計數(shù)減1
- 若不存在,則記錄a到interned中
駐留時機(jī)
- 所有長度為 0 和長度為 1 的字符串都被駐留
- 字符串只在編譯時進(jìn)行駐留,而非運(yùn)行時
a = 'hi' # a變量被駐留 b = ''.join(['h', 'i']) # 變量不會被駐留 print(a is b) # False
3.字符串中只包含字母,數(shù)字或下劃線時將會駐留
a = 'hello' b = 'hello' print(a is b) # True a = 'hello!' b = 'hello!' print(a is b) # False ```
常量折疊
是 Python 中的一種 窺孔優(yōu)化技術(shù)
. 這意味著在編譯時表達(dá)式 ‘a(chǎn)'*20 會被替換為 ‘a(chǎn)aaaaaaaaaaaaaaaaaaa' 以減少運(yùn)行時的時鐘周期. 只有長度小于 20 的字符串才會發(fā)生常量折疊.樣的設(shè)計目的是為了保護(hù).pcy文件不會被錯誤代碼搞的過大
a = 'a' * 10 b = 'aaaaaaaaaa' print(a is b) # True a = 'a' * 21 b = 'aaaaaaaaaaaaaaaaaaaaa' print(a is b) #False
字符串駐留機(jī)制的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
:能夠提高一些字符串處理任務(wù)在時間和空間上的性能,非駐留比較效率為o(n),駐留時比較效率為o(1)
缺點(diǎn)
:在創(chuàng)建或駐留字符串時的會花費(fèi)更多的時間
總結(jié)
到此這篇關(guān)于python 字符串的駐留機(jī)制的文章就介紹到這了,更多相關(guān)python字符串駐留內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch中的reshape()、view()、nn.flatten()和flatten()使用
這篇文章主要介紹了pytorch中的reshape()、view()、nn.flatten()和flatten()使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08Python 比較文本相似性的方法(difflib,Levenshtein)
今天小編就為大家分享一篇Python 比較文本相似性的方法(difflib,Levenshtein),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10python re.sub()替換正則的匹配內(nèi)容方法
今天小編就為大家分享一篇python re.sub()替換正則的匹配內(nèi)容方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07python opencv圖片編碼為h264文件的實(shí)例
今天小編就為大家分享一篇python opencv圖片編碼為h264文件的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12