代码块,小数据池
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的方式存在,并且复用
小结
如果在统一代码块下,采用统一代码块的缓存机制
不同代码块则采用小数据流的驻留机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下