Python字串駐留的原理探究

bluetooth發表於2021-09-11

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章