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字符串的常用操作方法小结
May 21 Python
常见的python正则用法实例讲解
Jun 21 Python
python分布式环境下的限流器的示例
Oct 26 Python
Python IDLE清空窗口的实例
Jun 25 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
python程序需要编译吗
Jun 19 Python
python Timer 类使用介绍
Dec 28 Python
如何用tempfile库创建python进程中的临时文件
Jan 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
模仿OSO的论坛(三)
2006/10/09 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python验证码识别处理实例
2015/12/28 Python
Python自动生产表情包
2017/03/17 Python
Python实现图片转字符画的示例
2017/08/22 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
Python交互式图形编程的实现
2019/07/25 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
各营销点岗位职责范本
2014/03/05 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
超市商业计划书
2014/05/04 职场文书
美国留学经济担保书
2014/05/20 职场文书
幼儿教师求职信
2014/05/24 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
免职证明样本
2014/10/23 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python