python如何实现驻留字符串?
- 更新时间:2021-07-02 08:06:02
- 编辑:简梓菱
给网友们整理相关的编程文章,网友幸雯华根据主题投稿了本篇教程内容,涉及到Python相关内容,已被310网友关注,下面的电子资料对本篇知识点有更加详尽的解释。
参考资料
- Python网络爬虫权威指南(第2版) PDF 电子书 / 5.54 MB / 瑞安·米切尔 推荐度:
- Python数据科学:技术详解与商业实践 PDF 电子书 / 154 MB / 常国珍 推荐度:
- 跟着迪哥学Python:数据分析与机器学习实战 PDF 电子书 / 68 MB / 唐宇迪 推荐度:
- 《PySpark实战指南:利用Python和Spark构建数据密集型应用并规模化部署 》源码 配套资源 / 7.57 MB / 托马兹·卓巴斯 推荐度:
- Python从入门到精通 PDF 电子书 / 66.6 MB / 陈政强 推荐度:
正文内容
给学习python的读者整理一篇《python如何实现驻留字符串?》优秀文章,技术点分析的很透彻,把程序员重写的代码发布到这里,看完如果觉得有用请记得收藏。
驻留字符串的原因
字符串驻留提高了字符串比较的速度。若未驻留,则当我们要比较两个字符串是否相等时,其时间复杂度会升至O(n),也就是说,需要检查两个字符串中的每一个字符,以确定它们是否相等。
驻留字符串的原理
如果字符串是固定的,那么因为相同的字符串将使用相同的对象引用,所以只要检查指针是否相同,就可以确定两个字符串是否相等,而不必再逐个检查每个字符。因为这是一种非常常见的操作,所以通常会将它作为指针相等检查来实现,只使用一条完全没有内存引用的机器指令。
String驻留可以减少内存占用。Python避免了内存中充满过多的字符串对象,并通过共享和重用已定义对象来优化内存占用。
实现驻留字符串:使用PyUnicode_InternInPlace函数
定义在 unicodeobject.c 中,当调用时,它会创建一个准备容纳所有驻留的字符串的字典interned,然后登记入参中的对象,令其键和值都使用相同的对象引用。
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; }
相关教程
-
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
这篇文章主要介绍了Pycharm创建python文件自动添加日期作者等信息(步骤详解),本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
发布时间:2021-05-02
-
Python实现的建造者模式示例
这篇文章主要介绍了Python实现的建造者模式,结合完整实例形式分析了构造者模式的具体定义与相关使用操作技巧,需要的朋友可以参考下
发布时间:2019-06-03