python 字符串的驻留机制及优缺点


Posted in Python onJune 19, 2020

说明

字符串驻留是一种仅保存一份相同且不可变字符串的方法。不同的值被存放在字符串驻留池中,发生驻留之后, 许多变量可能指向内存中的相同字符串对象, 从而节省内存.

原理

  • 系统维护interned字典,记录已被驻留的字符串对象
  • 当字符串对象a需要驻留时,先在interned检测是否存在,若存在则指向存在的字符串对象,a的引用计数减1
  • 若不存在,则记录a到interned中

驻留时机

  1. 所有长度为 0 和长度为 1 的字符串都被驻留
  2. 字符串只在编译时进行驻留,而非运行时
a = 'hi' # a变量被驻留
b = ''.join(['h', 'i']) # 变量不会被驻留
print(a is b) # False

3.字符串中只包含字母,数字或下划线时将会驻留

a = 'hello'
	b = 'hello'
	print(a is b) # True
	
	a = 'hello!'
	b = 'hello!'
	print(a is b) # False
	```

常量折叠是 Python 中的一种 窥孔优化技术. 这意味着在编译时表达式 ‘a'*20 会被替换为 ‘aaaaaaaaaaaaaaaaaaaa' 以减少运行时的时钟周期. 只有长度小于 20 的字符串才会发生常量折叠.样的设计目的是为了保护.pcy文件不会被错误代码搞的过大

a = 'a' * 10
b = 'aaaaaaaaaa'
print(a is b) # True

a = 'a' * 21
b = 'aaaaaaaaaaaaaaaaaaaaa'
print(a is b) #False

字符串驻留机制的优缺点

优点:能够提高一些字符串处理任务在时间和空间上的性能,非驻留比较效率为o(n),驻留时比较效率为o(1)
缺点:在创建或驻留字符串时的会花费更多的时间

总结

到此这篇关于python 字符串的驻留机制的文章就介绍到这了,更多相关python字符串驻留内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
Python打包可执行文件的方法详解
Sep 19 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
Python装饰器用法实例总结
May 26 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
jupyter notebook清除输出方式
Apr 10 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 Python
Python&Matlab实现樱花的绘制
Apr 07 Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 #Python
Python应用实现处理excel数据过程解析
Jun 19 #Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 #Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 #Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 #Python
Python应用实现双指数函数及拟合代码实例
Jun 19 #Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 #Python
You might like
模拟xcopy的函数
2006/10/09 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
javascript 面向对象继承
2009/11/26 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python打印斐波拉契数列实例
2015/07/07 Python
python 日期排序的实例代码
2019/07/11 Python
Python range与enumerate函数区别解析
2020/02/28 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
python中的装饰器该如何使用
2021/06/18 Python
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python