Python如何清理驻留的字符串

美女程序员鼓励师

1、说明

清除函数从interneddictionary遍历所有字符串,调整这些对象的引用计数,并将它们标记为NOT_INTERNED,这样垃圾回收就可以了。当所有的字符串都被标记为NOT_INTERNED时,将清空并删除interned字典。

2、清理实例

这个清理函数就是_PyUnicode_ClearInterned,在 unicodeobject.c 中定义。

 void

  _PyUnicode_ClearInterned(PyThreadState *tstate)

  {

      .........

  

      // Get all the keys to the interned dictionary

      PyObject *keys = PyDict_Keys(interned);

  

      .........

  

      // Interned Unicode strings are not forcibly deallocated;

      // rather, we give them their stolen references back

      // and then clear and DECREF the interned dict.

  

      for (Py_ssize_t i = 0; i < n; i++) {

          PyObject *s = PyList_GET_ITEM(keys, i);

  

          .........

  

          switch (PyUnicode_CHECK_INTERNED(s)) {

          case SSTATE_INTERNED_IMMORTAL:

              Py_SET_REFCNT(s, Py_REFCNT(s) + 1);

              break;

          case SSTATE_INTERNED_MORTAL:

              // Restore the two references (key and value) ignored

              // by PyUnicode_InternInPlace().

              Py_SET_REFCNT(s, Py_REFCNT(s) + 2);

              break;

          case SSTATE_NOT_INTERNED:

              /* fall through */

          default:

              Py_UNREACHABLE();

          }

  

          // marking the string to be NOT_INTERNED

          _PyUnicode_STATE(s).interned = SSTATE_NOT_INTERNED;

      }

  

      // decreasing the reference to the initialized and

      // access keys object.

      Py_DECREF(keys);

  

      // clearing the dictionary

      PyDict_Clear(interned);

  

      // clearing the object interned

      Py_CLEAR(interned);

  }

以上就是Python清理驻留字符串的方法,希望能对大家有所帮助。更多Python学习指路:python基础教程

以上是 Python如何清理驻留的字符串 的全部内容, 来源链接: utcz.com/z/543534.html

回到顶部