Python如何清理驻留的字符串

  • 更新时间:2021-07-19 09:20:45
  • 编辑:邓恨蝶
为网友们分享了相关的编程文章,网友慕英卓根据主题投稿了本篇教程内容,涉及到Python相关内容,已被281网友关注,涉猎到的知识点内容可以在下方电子书获得。

参考资料

正文内容

小编给大家总结一篇《Python如何清理驻留的字符串》的技术内容,实例用法很详细,重新编辑了一下发到本站,为了大家阅读方便。

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学习指路:

相关教程

用户留言