python 字符串的駐留機制及優(yōu)缺點
說明
字符串駐留是一種僅保存一份相同且不可變字符串的方法。不同的值被存放在字符串駐留池中,發(fā)生駐留之后, 許多變量可能指向內(nèi)存中的相同字符串對象, 從而節(jié)省內(nèi)存.
原理
- 系統(tǒng)維護interned字典,記錄已被駐留的字符串對象
- 當字符串對象a需要駐留時,先在interned檢測是否存在,若存在則指向存在的字符串對象,a的引用計數(shù)減1
- 若不存在,則記錄a到interned中
駐留時機
- 所有長度為 0 和長度為 1 的字符串都被駐留
- 字符串只在編譯時進行駐留,而非運行時
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ù). 這意味著在編譯時表達式 ‘a(chǎn)'*20 會被替換為 ‘a(chǎn)aaaaaaaaaaaaaaaaaaa' 以減少運行時的時鐘周期. 只有長度小于 20 的字符串才會發(fā)生常量折疊.樣的設計目的是為了保護.pcy文件不會被錯誤代碼搞的過大
a = 'a' * 10 b = 'aaaaaaaaaa' print(a is b) # True a = 'a' * 21 b = 'aaaaaaaaaaaaaaaaaaaaa' print(a is b) #False
字符串駐留機制的優(yōu)缺點
優(yōu)點:能夠提高一些字符串處理任務在時間和空間上的性能,非駐留比較效率為o(n),駐留時比較效率為o(1)
缺點:在創(chuàng)建或駐留字符串時的會花費更多的時間
總結(jié)
到此這篇關(guān)于python 字符串的駐留機制的文章就介紹到這了,更多相關(guān)python字符串駐留內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyTorch中torch.utils.data.DataLoader實例詳解
torch.utils.data.DataLoader主要是對數(shù)據(jù)進行batch的劃分,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.utils.data.DataLoader的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-09-09
python分析實現(xiàn)微信釘釘?shù)溶浖嚅_分身
我發(fā)現(xiàn)壇友分享的很多都是通過cmd?去start?多個微信,雖然能實現(xiàn)多開,但不夠靈活,比如我上午登錄了一個微信,下午在登錄就不太好用了,當然也可能是我start的姿勢不對。于是我就搜了下單實例原理,自己動手實現(xiàn)了個隨用隨開的2022-02-02
Scrapy基于scrapy_redis實現(xiàn)分布式爬蟲部署的示例
這篇文章主要介紹了Scrapy基于scrapy_redis實現(xiàn)分布式爬蟲部署的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
python使用suds調(diào)用webservice接口的方法
今天小編就為大家分享一篇python使用suds調(diào)用webservice接口的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

