- 对于整型(int)而言,-5~正无穷范围内的相同值 id一致
- 对于浮点数(float)而言,非负数范围内的相同值 id一致
- 布尔值(bool)而言,值相同情况下,id一致
- 复数(complex)的id标识都不相同(在 实数+虚数 这样的结构中,只有虚数的情况下例外)
- 字符串(str)而言,字符串值相同情况下,id一致
- 列表(list),元组(tuple),字典(dict),集合(set)无论什么情况 id标识都不同(但空元组的id标识一样)
2. 不同文件(模块)里, 部分数据驻留小数据池中
python提前在内存中创建了-5~256 范围的整数,驻留在了内存的一块区域。如果是不同文件(模块)的两个变量,并在此范围具有了相同的值, 那么id一致.
小数据池只针对:int, str, bool,以及空元组(,), None关键字 有效
对于字符串来说:
- 字符串的长度为0或者1,默认驻留小数据池
- 字符串的长度>1, 且只含有大小写字母,数字,下划线时,默认驻留小数据池
- 用乘法得到的字符串,分两种情况:
- 乘数为1时:无论什么字符串 * 1 , 都默认驻留小数据池
- 乘数大于1时:乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度大于20则不会缓存
3. 指定驻留 intern
from sys import intern a = intern('大帅锅&^^1234'10) b = intern('大帅锅&^^1234'10) print(a is b)
可以指定任意字符串加入到小数据池中, 无论声明多少个变量, 只要此值相同, 都指向同一个地址空间
目的:
无论是缓存机制还是小数据池的驻留机制, 都是为了节省内存空间, 提升代码效率