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爬虫之爬取糗事百科段子
Feb 17 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Python中turtle作图示例
Nov 15 Python
Python多线程原理与用法实例剖析
Jan 22 Python
Python中文编码知识点
Feb 18 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 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+Html+缓存
2006/12/20 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
广告代码静态化js通用函数
2007/05/09 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python 闭包的使用方法
2017/09/07 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
对python:print打印时加u的含义详解
2018/12/15 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
python实现Virginia无密钥解密
2019/03/20 Python
手写一个python迭代器过程详解
2019/08/27 Python
Django 解决由save方法引发的错误
2020/05/21 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
《草原》教学反思
2014/02/15 职场文书
市场策划求职信
2014/08/07 职场文书
工作收入证明范本
2015/06/12 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Python编程super应用场景及示例解析
2021/10/05 Python
Linux中sftp常用命令整理
2022/06/28 Servers