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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Python-typing: 类型标注与支持 Any类型详解
May 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
Smarty模板快速入门
2007/01/04 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
PHP自定义多进制的方法
2016/11/03 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
详解Python中的相对导入和绝对导入
2017/01/06 Python
python3.5绘制随机漫步图
2018/08/27 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
关于工作时间玩手机的检讨书
2014/09/18 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL