python 字符串的駐留機(jī)制及優(yōu)缺點(diǎn)
說(shuō)明
字符串駐留是一種僅保存一份相同且不可變字符串的方法。不同的值被存放在字符串駐留池中,發(fā)生駐留之后, 許多變量可能指向內(nèi)存中的相同字符串對(duì)象, 從而節(jié)省內(nèi)存.
原理
系統(tǒng)維護(hù)interned字典,記錄已被駐留的字符串對(duì)象 當(dāng)字符串對(duì)象a需要駐留時(shí),先在interned檢測(cè)是否存在,若存在則指向存在的字符串對(duì)象,a的引用計(jì)數(shù)減1 若不存在,則記錄a到interned中駐留時(shí)機(jī)
所有長(zhǎng)度為 0 和長(zhǎng)度為 1 的字符串都被駐留 字符串只在編譯時(shí)進(jìn)行駐留,而非運(yùn)行時(shí)a = ’hi’ # a變量被駐留b = ’’.join([’h’, ’i’]) # 變量不會(huì)被駐留print(a is b) # False
3.字符串中只包含字母,數(shù)字或下劃線時(shí)將會(huì)駐留
a = ’hello’b = ’hello’print(a is b) # Truea = ’hello!’b = ’hello!’print(a is b) # False```
常量折疊是 Python 中的一種 窺孔優(yōu)化技術(shù). 這意味著在編譯時(shí)表達(dá)式 ‘a(chǎn)’*20 會(huì)被替換為 ‘a(chǎn)aaaaaaaaaaaaaaaaaaa’ 以減少運(yùn)行時(shí)的時(shí)鐘周期. 只有長(zhǎng)度小于 20 的字符串才會(huì)發(fā)生常量折疊.樣的設(shè)計(jì)目的是為了保護(hù).pcy文件不會(huì)被錯(cuò)誤代碼搞的過(guò)大
a = ’a’ * 10b = ’aaaaaaaaaa’print(a is b) # Truea = ’a’ * 21b = ’aaaaaaaaaaaaaaaaaaaaa’print(a is b) #False
字符串駐留機(jī)制的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):能夠提高一些字符串處理任務(wù)在時(shí)間和空間上的性能,非駐留比較效率為o(n),駐留時(shí)比較效率為o(1)缺點(diǎn):在創(chuàng)建或駐留字符串時(shí)的會(huì)花費(fèi)更多的時(shí)間
總結(jié)
到此這篇關(guān)于python 字符串的駐留機(jī)制的文章就介紹到這了,更多相關(guān)python字符串駐留內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. IntelliJ IDEA導(dǎo)入jar包的方法2. Python requests庫(kù)參數(shù)提交的注意事項(xiàng)總結(jié)3. vue-electron中修改表格內(nèi)容并修改樣式4. python ansible自動(dòng)化運(yùn)維工具執(zhí)行流程5. 匹配模式 - XSL教程 - 46. python操作mysql、excel、pdf的示例7. JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼8. SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用教程9. 通過(guò)Python pyecharts輸出保存圖片代碼實(shí)例10. 詳談ajax返回?cái)?shù)據(jù)成功 卻進(jìn)入error的方法
