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发送邮件接收邮件示例分享
Jan 21 Python
Python入门篇之函数
Oct 20 Python
零基础写python爬虫之抓取百度贴吧代码分享
Nov 06 Python
Python实现豆瓣图片下载的方法
May 25 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
用于业余项目的8个优秀Python库
Sep 21 Python
python用plt画图时,cmp设置方法
Dec 13 Python
python关于调用函数外的变量实例
Dec 26 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
python 绘制正态曲线的示例
Sep 24 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
在字符串中把网址改成超级链接
2006/10/09 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
拖动一个HTML元素
2006/12/22 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python with语句的原理与用法详解
2020/03/30 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
大专生自我鉴定范文
2013/10/01 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers