gpt4 book ai didi

浅析Python中字符串的intern机制

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅析Python中字符串的intern机制由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

intern机制:

  字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化,例如:Python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?即值同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象.

简单原理:

  实现 Intern 机制的方式非常简单,就是通过维护一个字符串储蓄池,这个池子是一个字典结构,如果字符串已经存在于池子中就不再去创建新的字符串,直接返回之前创建好的字符串对象,如果之前还没有加入到该池子中,则先构造一个字符串对象,并把这个对象加入到池子中去,方便下一次获取.

但是,解释器内部对intern 机制的使用策略是有考究的,有些场景会自动使用intern ,有些地方需要通过手动方式才能启动,看下面几个常见的小陷阱.

  • 1.在shell中示例,并非全部的字符串都会采用intern机制。仅仅包括下划线、数字、字母的字符串才会被intern,当然不能超过20个字符。因为如果超过20个字符的话,解释器认为这个字符串不常用,不用放入字符串池中。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> 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支持的不好。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.字符串拼接时,涉及编译运行问题
?
1
2
3
4
5
6
7
8
9
10
11
12
>>> 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机制的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/chenshengkai/p/13733265.html 。

最后此篇关于浅析Python中字符串的intern机制的文章就讲到这里了,如果你想了解更多关于浅析Python中字符串的intern机制的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com