python 驻留机制

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.优劣势

优势:减小内存开销,省略申请内存空间的过程,提高执行效率
劣势:创建驻留对象需要花费额外的开销
posted @ 2021-03-16 14:58  朝朝哥  阅读(247)  评论(0编辑  收藏  举报