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实现class对象转换成json/字典的方法
Mar 11 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
python怎么判断模块安装完成
Jun 19 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
利用Python将图片中扭曲矩形的复原
Sep 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
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
年会搞笑主持词
2014/03/27 职场文书
《秋游》教学反思
2014/04/24 职场文书
社区志愿者活动方案
2014/08/18 职场文书
2014年妇联工作总结
2014/11/21 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
小学新课改心得体会
2016/01/22 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python