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脚本来获取Google搜索结果的示例
May 04 Python
python文本数据相似度的度量
Mar 12 Python
实例讲解python中的序列化知识点
Oct 08 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
python实现移位加密和解密
Mar 22 Python
python3对接mysql数据库实例详解
Apr 30 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
基于Python把网站域名解析成ip地址
May 25 Python
Keras—embedding嵌入层的用法详解
Jun 10 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&java(一)
2006/10/09 PHP
php 三维饼图的实现代码
2008/09/28 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
koa源码中promise的解读
2018/11/13 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
python动态加载变量示例分享
2014/02/17 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python版名片管理系统
2018/11/30 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
python如何制作缩略图
2019/04/30 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
法定代表人授权委托书格式
2014/10/14 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
义诊活动总结
2015/02/04 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP