代码块,小数据池
id is == 代码块
id
变量存储在内存中是有一个唯一的内存地址的,定义一个变量就是在内存空间中开辟一个空间
- 如何获取对象的内存ID?
num = 123
msg = "abc"
print(id(num))
print(id(msg))
#字符串的内存ID是随机的,如果ID相同,那么就是同一个
ID相同,值一定相同
值相同,ID不一定相同
==
== : 比较的是两边的值是否相等
s1 = [1,2,3]
s2 = [1,2,3]
print(s1 == s2)
is
is : 判断的是内存地址是否相同
s1 = [1,2,3]
s2 = [1,2,3]
print(s1 is s2)
#s1 s2在内存中创建了2个
s1 = "abc"
s2 = "abc"
print(s1 is s2)
#s1 s2在内存中是同一个
代码块
python程序时由代码块构造的,块是一个python程序的文本,作为一个单元执行的。
- 代码块:一个文件,一个函数,一个模块,一个类,终端中一行就是一个代码块
- 交互方式输入的每行命令都是一个代码块
缓存机制
代码块
- 前提条件:在同一个代码块内,版本3.6及以下
- 机制内容:python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在 ,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会现在字典中查询记录,如果有同样的记录,那么他会重复使用这个字典中的之前的这个值。满足缓存机制则在内存中只存在一个。
- 好处:节省内存,提高效率
- 使用对象:int(float),str,bool
- 对象的具体细则:
- int(float):>= -5 的数字在同一代码块下都是复用的
- bool:True和False在字典中会以1,0的方式存在,并且复用
- str:几乎所有的字符串都符合缓存机制:
- 非乘法得到的字符串都满足缓存机制(共用一个内存空间)
- 乘数>=2时,满足仅含大小写字母,数字,下划线,总长度<=20内存地址相同
- 乘数为1 时,任何字符串都满足代码块的缓存机制
- 中文,特舒符号 乘法的时候只能乘以1或 0
- 非乘法得到的字符串都满足缓存机制(共用一个内存空间)
小数据池
小数据池,不同代码块的缓存机制,也称为小整数缓存机制,或者称为驻留机制等等。
小数据池的验证方法:必须脱离代码块才可以
- 前提条件:在不同代码块之间,版本3.6及以下
- 数字
- 范围:-5~256内满足缓存机制
- 字符串
- 字符串的长度为0 或 1 ,默认符合驻留机制(小数据池)
- 字符串长度>1,且只含有大小写字母,数字,下划线时才会默认驻留
- 用乘法得到字符串
- 乘数为1 :
- 仅含大小写字母,数字,下划线,默认驻留
- 含有其他字符,长度<=1,默认驻留
- 含有其他字符,长度>1,默认驻留
- 乘数 >=2时:
- 仅含大小写字母,数字,下划线时,总长度<=20,默认驻留
- 乘数为1 :
- 布尔值
- True和False在字典中会以1,0的方式存在,并且复用
小结
如果在统一代码块下,采用统一代码块的缓存机制
不同代码块则采用小数据流的驻留机制