一. 定义
a=10 b=10 print(id(a)) #4401347152 print(id(b)) #4401347152
总结:
# 数值类型(int, float, bool)
1.对于整型而言,-5~正无穷范围内的相同值 id一致
2.对于浮点数而言,正数范围内的相同值 id一致
3.布尔值而言,值相同情况下,id一致
4.字符串值相同,并且不包含特殊字符,id一致
# 容器/复合数据类型(list, set, dict, tuple)
5.空元组 相同的情况下,地址相同
6.列表,元组,字典,集合无论什么情况 id标识都不同
特别说明:
简单元组,超出范围的整型,浮点型,在pycharm中因为是基于文本模式,所以会被当成一个整体在python解释器中被缓存,但是在黑窗口下因为是基于交互模式,因此一行代码就是一个整体,因此不会被缓存。
二. is运算符
# 在python中如果要比较两个变量是否同一个值,一般是使用 == 判断。 # 但是,如果在判断的基础上,还要判断两个变量的内存地址是否一样的话,则需要使用is来判断 # 在python单纯依靠 == 判断两个数据,只能判断值是否一致 # 如果要判断数据是否是同一个,那么还要判断内存地址是否一样 a = -10 b = -10 print( id(a) == id(b)) # 文本模式下True,交互模式下False # 除了上面直接使用id函数提取内存地址判断以外,可以使用is运算符来判断值是否一样,内存地址是否一样。 a = -10 b = -10 print( a is b) # True a = [1,2] b = [1,2] print(a is b) # False
说明:
1. 基于is可以直接判断两个数据的值是否一样,内存地址同一个
2. 基于== 只能判断两个数据的值是否一样
三. 小数据池
不同的python文件(模块)中的代码里面的相同数据的本应该是不在同一个内存地址当中的, 而是应该全新的开辟一个新空间,但是这样也会占用了更多的内存,所以python定义了小数据池的概念,默认允许小部分数据即使在不同的文件当中,只要数据相同就可以使用同一个内存空间,以达到节省内存的目的。
小数据池只针对:int、bool、None关键字 ,这些数据类型有效。(int有争议,在部分系统下没有被缓存到小数据池中)
# 在其他语言中,如果不同文件/不同窗口下,创建的变量的数据即便一样,也是保存不同的内存空间中的。 # 但是,python为了达到优化的目的,会把简单的小数据(整型,浮点型,None, bool)固化在一个相同内存中,所以python不同文件的小数据,内存地址是一样的。
以下为两个py文件下执行内容,得到的id值相同
a = 5 print(a, id(a))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现