??今日隨筆:字串駐留??
一、場景復現
我們先來看以下代碼,
以上代碼的運行很正常,,,沒有什么例外的??????
那好,接下來我們再看以下代碼,


相信大家看??完之后一定會很困擾吧??????,這兩個圖片中唯一的區別就是多了個特殊字符“!”,結果卻截然不同,
其實這就涉及到了Python的“字串駐留”,英文名為:string intern,
二、什么是字串駐留呢??????
在 Python中,萬物皆物件,當我們為一個變數a賦值的時候,此時a指向值“python”的記憶體地址,
那么當我們再次為變數b賦值的時候,Python解釋器會先在駐留記憶體中查找是否已經存在這個“python”物件,
如果已經存在就不再創造新的物件,兩個變數a和b共享同一個物件,諾,如下圖所示:

這就是駐留字串的概念,因為變數a和變數b都指向同一個物件,也就是同一個記憶體地址,因此,a is b 的結果就是True,
那么對于這種短字串,在記憶體中可能大量存在,這樣做的好處就是可以節約記憶體,但是這并不意味著所有的字串都是這樣的,
針對于短字串,當我們將其賦值給多個物件時,在記憶體中只有一個副本,多個物件共享該副本,
三、字串的注意事項
1、字串的駐留條件
??僅包含字母、數字、下劃線的字串,python會啟用駐留機制,
因為Python解釋器僅對看起來像python識別符號的字串使用intern()方法,而python識別符號正是由字母、數字和下劃線組成,??
2、字串的連接
??字串資料型別,是不可變型別,我們都知道,如果我們有了一個字串,想要修改它,是不可以的,則必須新建一個物件,
因此不推薦使用“+”連接字串,而推薦大家采用join()方法??
3、整數駐留
??python會針對整數范圍是[-5, 256]的整數啟用駐留機制??
四、駐留機制的應用場景
??這種駐留機制好像在實際應用中并沒有什么用,為什么我們還是要了解呢,因為,至少我們可以在面試的時候露一手呀????
五、測驗條件
??使用Python互動式又或者使用ipython測驗,結果均相同,但是使用PyCharm,結果卻不同,
因為PyCharm為我們又做了進一步的優化,這也就是為什么PyCharm運行的時候會占用大量的記憶體空間的原因,??
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143482.html
標籤:Python
下一篇:x01.paint: 繪圖程式
