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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Python中统计函数运行耗时的方法
May 05 Python
八大排序算法的Python实现
Jan 28 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
Django 视图层(view)的使用
Nov 09 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
快速排序的四种python实现(推荐)
Apr 03 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python实现程序重启和系统重启方式
Apr 16 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
深入浅析python 中的self和cls的区别
Jun 20 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制作APP接口(API)
2016/03/15 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python安装pywin32clipboard的操作方法
2019/01/24 Python
django在开发中取消外键约束的实现
2020/05/20 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
自荐信模版
2013/10/24 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
党课心得体会范文
2014/09/09 职场文书
婚内分居协议书范文
2014/11/26 职场文书
教师考核评语大全
2014/12/31 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
工作一年自我鉴定
2019/06/20 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
Python中的嵌套循环详情
2022/03/23 Python
Web应用开发TypeScript使用详解
2022/05/25 Javascript