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中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
详解Python正则表达式re模块
Mar 19 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
Python实现微信机器人的方法
Sep 06 Python
django框架forms组件用法实例详解
Dec 10 Python
python数据抓取3种方法总结
Feb 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
Js中sort()方法的用法
2006/11/04 Javascript
javascript第一课
2007/02/27 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
如何运行Python程序的方法
2013/04/21 Python
python冒泡排序简单实现方法
2015/07/09 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
挂科检讨书范文
2014/02/20 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
考试诚信承诺书
2014/05/23 职场文书
师范毕业生求职信
2014/07/11 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
第一军规观后感
2015/06/12 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
python析构函数用法及注意事项
2021/06/22 Python
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript