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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
python使用urllib2提交http post请求的方法
May 26 Python
简单解决Python文件中文编码问题
Nov 22 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
详解python发送各类邮件的主要方法
Dec 22 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
基于python修改srt字幕的时间轴
Feb 03 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 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
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
php依赖注入知识点详解
2019/09/23 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
原生JS实现留言板
2020/03/26 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python入门之井字棋小游戏
2020/03/05 Python
python eventlet绿化和patch原理
2020/11/21 Python
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
2014年会计工作总结
2014/11/27 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python