intern机制:
字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化,例如:Python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?即值同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象。
简单原理:
实现 Intern 机制的方式非常简单,就是通过维护一个字符串储蓄池,这个池子是一个字典结构,如果字符串已经存在于池子中就不再去创建新的字符串,直接返回之前创建好的字符串对象,如果之前还没有加入到该池子中,则先构造一个字符串对象,并把这个对象加入到池子中去,方便下一次获取。
但是,解释器内部对intern 机制的使用策略是有考究的,有些场景会自动使用intern ,有些地方需要通过手动方式才能启动,看下面几个常见的小陷阱。
- 1.在shell中示例,并非全部的字符串都会采用intern机制。仅仅包括下划线、数字、字母的字符串才会被intern,当然不能超过20个字符。因为如果超过20个字符的话,解释器认为这个字符串不常用,不用放入字符串池中。
> s1="hello" > s2="hello" > s1 is s2 True# 如果有空格,默认不启用intern机制 > s1="hell o" > s2="hell o" > s1 is s2 False# 如果一个字符串长度超过20个字符,不启动intern机制 > s1 = "a" * 20 > s2 = "a" * 20 > s1 is s2 True > s1 = "a" * 21 > s2 = "a" * 21 > s1 is s2 False > s1 = "ab" * 10 > s2 = "ab" * 10 > s1 is s2 True > s1 = "ab" * 11 > s2 = "ab" * 11 > s1 is s2 False
- 2.但是在PyCharm中,只要是同一个字符串不超过20个字符,都为True,并不用是下划线、数字、字母的字符串。个人理解:IDE支持的不好。
s1 = "hell o" s2 = "hell o" print(s1 is s2) # True s1 = "hell!*o" s2 = "hell!*o" print(s1 is s2) # True s1 = "a" * 20 s2 = "a" * 20 print(s1 is s2) # True s1 = "a" * 21 s2 = "a" * 21 print(s1 is s2) # False s1 = "ab" * 10 s2 = "ab" * 10 print(s1 is s2) # True s1 = "ab" * 11 s2 = "ab" * 11 print(s1 is s2) # False
- 3.字符串拼接时,涉及编译运行问题
> s1 = "hell" > s2 = "hello" > s1 + "o" is s2 False > "hell" + "o" is s2 True > # 说明shell和IDE在这方面没有差异 s1 = "hell" s2 = "hello" print(s1 + "o" is s2) # False print("hell" + "o" is s2) # True#因为"hell" + "o"在编译时已经变成了"hello",而s1+"o"因为s1是一个变量,他们会在运行时进行拼接,所以没有被intern
作者:Nobita Chen
出处:http://www.cnblogs.com/chenshengkai/
以上就是浅析Python中字符串的intern机制的详细内容,更多关于python 字符串的intern机制的资料请关注其它相关文章!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“浅析Python中字符串的intern机制”评论...
更新日志
2024年11月08日
2024年11月08日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]