2

字符串的驻留机制_LazyEveryday的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/u_15500997/5448838
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

字符串的驻留机制

原创
字符串的驻留机制
1.字符串

在Python中字符串是基本数据类型,是一个不可变的字符序列

2.什么叫字符串驻留机制

仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新的变量

a = 'python'
b = "python"
c = '''python'''

print(a,id(a))
print(b,id(b))
print(c,id(c))
'''开辟了一块value为python的一块空间,所创建的三个变量a,b,c
都指向python,由于字符串的驻留机制,因此他们的id号相同'''
字符串的驻留机制_python
3.驻留机制的几种情况

1.字符串的长度为0或1时:''  's'  '%'

2.符合标识符的字符串(数字,字母,下划线):'abc','ab_'

3.字符串只在编译时进行驻留,而非进行时

4.[-5,256]之间的整数数字

sys中intern方法强制两个字符串指向同一个对象

pycharm对字符串进行优化处理

print('---1.单字符串/空字符串----')
a = ''
b = ''
print(a is b)
c = 's'
d = 's'
print(c is d)
m = '%'
n = '%'
print(m is n)

print('----2.符合标识符的字符串-----')
a = 'abc'
b = 'abc'
print(a is b)
c = 'ab_'
d = 'ab_'
print(c is d)
m = 'abc%'
n = 'abc%'
print(m is n) # % 不符合标识符,在pycharm中True,因为会对其做优化
字符串的驻留机制_python_02
字符串的驻留机制_字符串_03
字符串的驻留机制_优缺点_04
4.字符串驻留机制的优缺点

1.当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串实惠比较影响性能的

2.在需要进行字符串拼接时建议使用str类型的join方法,而非‘+’,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比‘+’效率高

print('----join不会触发驻留机制----')
a = 'abc'
b = 'ab' + 'c'
c = ''.join(['ab','c'])
print(a is b) #True
print(a is c) #False
字符串的驻留机制_字符串的驻留机制_05

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK