Python字串駐留的原理探究
1、說明
在CPython中,字串引用由一個名為interned的Python字典儲存、訪問和管理。當第一次呼叫常駐字串時,字典被延遲初始化,並儲存對所有常駐字串物件的引用。
2、原理例項
負責常駐字串的核心函式是PyUnicode_InternInPlace,它是在unicodeobject.c中定義的,呼叫時會建立一個interned的字典來容納所有常駐字串,然後在引數中註冊物件,使它們的鍵和值使用相同的物件引用。
以下函式片段顯示了 Python 實現字串駐留的過程。
void PyUnicode_InternInPlace(PyObject **p) { PyObject *s = *p; ......... // Lazily build the dictionary to hold interned Strings if (interned == NULL) { interned = PyDict_New(); if (interned == NULL) { PyErr_Clear(); return; } } PyObject *t; // Make an entry to the interned dictionary for the // given object t = PyDict_SetDefault(interned, s, s); ......... // The two references in interned dict (key and value) are // not counted by refcnt. // unicode_dealloc() and _PyUnicode_ClearInterned() take // care of this. Py_SET_REFCNT(s, Py_REFCNT(s) - 2); // Set the state of the string to be INTERNED _PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL; }
以上就是Python字串駐留的原理探究,希望能對大家有所幫助。更多Python學習指路:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3402/viewspace-2830584/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python生成器的原理探究Python
- StartMiner新型變種,駐留增多難查殺
- String字串效能優化的探究字串優化
- 探究Spring原理Spring
- dotnet 探究 SemanticKernel 的 planner 的原理
- 警惕國產挖礦木馬CPLMiner利用WMI駐留挖礦
- zookeeper使用和原理探究
- RunLoop底層原理探究OOP
- 【瀏覽器】渲染原理探究瀏覽器
- iOS底層原理探究-RunloopiOSOOP
- iOS底層原理探究-RuntimeiOS
- 底層原理探究(二)RunLoopOOP
- Promise原理探究及實現Promise
- Jackson原理探究—Mixins其一
- iOS底層原理 - 常駐執行緒iOS執行緒
- Python中的字串Python字串
- [譯]瀏覽器工作原理探究瀏覽器
- 探究Hybrid-APP技術原理APP
- 從零實現DNN 探究梯度下降的原理DNN梯度
- UITableView的原理——探究及重新實現程式碼UIView
- MG--探究KVO的底層實現原理
- python中切片的淺複製探究Python
- iOS底層原理 - Block本質探究iOSBloC
- Python中的字串與字串格式化Python字串格式化
- 06 - Python 中的字串Python字串
- Python的字串分割方法Python字串
- Python字串的運用Python字串
- 06 – Python 中的字串Python字串
- Python字串Python字串
- Python武器庫 - 科研中常用的python字串處理 - 字串擴充Python字串
- 來來來,探究一下CommonJs的實現原理JS
- python字串的格式化Python字串
- python多程式取代多執行緒的探究Python執行緒
- Python 字串 strPython字串
- Python字串字首Python字串
- Python字串操作Python字串
- Python-字串Python字串
- python字串切片Python字串