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字典的常用操作方法小结
May 16 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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数据缓存技术
2007/02/14 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
深入理解PHP中的global
2014/08/19 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
js轮播图代码分享
2016/07/14 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
python 3.7.0 下pillow安装方法
2018/08/27 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python区分不同数据类型的方法
2019/10/14 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
什么是网络协议
2016/04/07 面试题
英文自荐信格式
2013/11/28 职场文书
简历上的自我评价
2014/02/03 职场文书
超市创意活动方案
2014/08/15 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
python实现批量移动文件
2021/04/05 Python
详解Redis实现限流的三种方式
2021/04/27 Redis
python 实现的截屏工具
2021/05/08 Python
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js