知行编程网知行编程网  2023-01-03 05:30 知行编程网 隐藏边栏  4 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python如何清理驻留的字符串的相关知识,包括python空字符串,以及python字符串数组这些编程知识,希望对大家有参考作用。

Python如何清理常驻字符串


1、说明

cleanup 函数遍历 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学习指路:

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享