随笔 - 65  文章 - 0 评论 - 0 阅读 - 28752
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一. 定义

变量缓存机制,也叫内存驻留机制在这个变量缓存机制中,python把一些相同值的变量在内存中指向同一块内存空间,不再重新开辟新的空间。

python中使用id()函数查看数据的内存地址。

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有争议,在部分系统下没有被缓存到小数据池中)

None属于python里面一个关键字,表示什么都没有,一般在程序中,用于表示没有结果。

# 在其他语言中,如果不同文件/不同窗口下,创建的变量的数据即便一样,也是保存不同的内存空间中的。
# 但是,python为了达到优化的目的,会把简单的小数据(整型,浮点型,None, bool)固化在一个相同内存中,所以python不同文件的小数据,内存地址是一样的。
以下为两个py文件下执行内容,得到的id值相同
a = 5 print(a, id(a))

 

posted on   大明花花  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示