1. 简介
申明一个内存空间,后续申明相同的值,不会再开辟一块新的内存空间,指向已有的内存空间
2.适用类型
1. str
2. int
3. bool
3.实现原理
1. 系统维护一个记录驻留对象的字典
2. 当某个对象需要驻留,查看在字典中是否存在,若存在就指向已存在的内存空间;
3. 新驻留对象不存在于该字典中,开辟内存空间,记录该对象
4.驻留时机
1. 所有长度为 0 和长度为 1 的字符串都被驻留
2. 字符串只在编译时进行驻留,而非运行时
3. 字符串中只包含字母,数字或下划线时将会驻留
4. 字符串长度不超过20位
5.测试
# str
one = 'ffffffffffffffffffff'
two = 'ffffffffffffffffffff'
print(id(one), id(two)) # 42768184 42768184
# int
three = 34567
four = 34567
print(id(three), id(four)) # 4697808 4697808
# bool
five = True
six = True
print(id(five), id(six)) # 497676512 497676512
# 超过20位
vv = "s" * 30
bb = "s" * 30
print(id(vv), id(bb)) # 35820848 35821088
# 自己手动驻留
import sys
vv = sys.intern("s" * 30 + "666")
bb = sys.intern("s" * 30 + "666")
print(id(vv), id(bb)) # 38382824 38382824
5.优劣势
优势:减小内存开销,省略申请内存空间的过程,提高执行效率
劣势:创建驻留对象需要花费额外的开销