社区
脚本语言
帖子详情
python 值相同变量名不同,内存地址相同吗?
_firemoon
2017-09-23 07:21:18
如图,为什么有的相同,有的不同,原因是什么,有没有阈值
...全文
1718
7
打赏
收藏
python 值相同变量名不同,内存地址相同吗?
如图,为什么有的相同,有的不同,原因是什么,有没有阈值
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
爱奔跑的孩子
2019-11-16
打赏
举报
回复
python缓存了-5~~256 的整型数组 同意楼上
QuantumEnergy
2017-09-29
打赏
举报
回复
建议去看看python的缓存机制
G_scsd
2017-09-27
打赏
举报
回复
在python3.0中,python中缓存了0到255的数字,所以在这范围内的字面值的变量的地址都一样
CDSoftwareWj
2017-09-25
打赏
举报
回复
楼上说的比较清楚了,python会提前分配一些常用的值来提高效率,具体可以看《Python 源码剖析》 里面讲的非常清楚
python_T
2017-09-24
打赏
举报
回复
小整数对象池:python在执行的时候,为了节约空间,帮我们创建好了小整数对象池,[-5~256],都是固定的地址,不管你用不用,都会存在。 比如,a=5,b=5,id(a)和id(b)的地址都是小整数池中固定已经存在的地址,所以相等 但如果,a=1000,b=1000,这时会给a一个地址,也会给b一个地址,但他们都不相等。 希望可以帮助你~
混沌鳄鱼
2017-09-23
打赏
举报
回复
1
Python 解释器对于数字有个小数字缓存池:-5~257, 原因是:地址数据最少是32位的,现在都是64位了,如果单独为一个小整数创建一个对象,10个地方用到这个小整数,那么就会在内存中创建10个存储的内存地址的空间,地址占用的数据长度比数据本身还大这样非常不划算。而有这个缓存池,python解释器内部就会共享这个小整数对象,不去开内存空间。从而减少内存的使用率,降低浪费。) 字符串也有内存池,给了2k空间,python内部有算法,按照内部权重排列,如果级别高了就把你放入内存。列表、字典都有。
chuifengde
2017-09-23
打赏
举报
回复
常数超过256,id就不一样了
python
中
值
一样
变量名
不同
那么内存中的地址
相同
吗
跟Java一样, 为提高内存利用效率,
Python
解释器在运行程序时会建立一个共享对象池, 将常用的小整数(不大于256)都放在这个池子里. 创建不大于256的整数对象时, 直接从池子里面取, 而不是分配新的内存空间创建新的对象. 所以对于不大于256的整数,
相同
值
的整数对象其
内存地址
都一样 ...
python
变量与内存
一、变量与内存的结构关系
python
的变量类似于标签的作用,内容散布于内存中,为了方便管理,用变量把这些内存中的内容标示出来。如下图所示: 一般
python
的内存结构以64字节为一个单位,随便在
python
中申明变量abcdef,并赋上
值
,对应的内存结构大致是这样: 需要注意的是,分配出来的内存可能是连续的,下一个内存比上一个内存多64个字节,也可能是不连续的,为64个字节的倍数。 这样就可以看出来,变量a或是b只是一个标签,指向实际的内容,方便人类识别他们代表什么东西。 如果把a指向的
值
赋
python
中同样数
值
的
不同
变量
内存地址
一样
Python
实现int的时候,为了效率,首先创建出一个整数池,便于复用。 如:创建
值
为666的一个整数,也就是从整数池里拿出666。 整数对象[-5,256]是全局解释器范围内被重复使用,不会被GC回收。 在pycharm上运行
Python
出于对性能的考虑,不可变对象,
相同
的对象,就直接引用已经存在的对象。 ...
关于
python
容器(dict、set、list、tuple) 内容
相同
的两个变量的
内存地址
是否
相同
关于
python
容器(dict、set、list、tuple) 内容
相同
的两个变量的
内存地址
是否
相同
结论:dict、set、tuple这三个类型,内容
相同
的两个变量的指向的
内存地址
相同
list 内容
相同
指向的两个变量的
内存地址
不同
,具体如下代码所示。 print('----dict----') se2 = {3: 'haha', 4: 'haha', 5:'haha'} se1 = {3: 'haha', 4: 'haha', 5:'haha'} print(id(se1)) print(id(se1)
python
之数据的赋
值
方式,变量
内存地址
的获取方式,获取
变量名
的方法,
不同
方法之间的区别
交互式赋
值
:将多个
变量名
放在等号的左边,与其相对应的
值
放在等号的右边,
变量名
与
变量名
之间,数
值
与数
值
之间用逗号隔开 举例: 输出结果如下: 连续赋
值
:这种情况适用于多个变量对应的
值
是
相同
的情况,
不同
变量名
之间用等号的方式连接 举例: 输出结果如下所示: 单独赋
值
:变量=对应的
值
举例: 输出结果如下所示: 获取变量的
内存地址
:id(
变量名
) 举例: 输出结果如下所示: 获取
变量名
的方式:1:type(
变量名
) 2:isinstance【只用来判断预测的数据类型和实际的是否一致】(
变量名
,预测的数据类型) 举
脚本语言
37,719
社区成员
34,239
社区内容
发帖
与我相关
我的任务
脚本语言
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
复制链接
扫一扫
分享
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
试试用AI创作助手写篇文章吧
+ 用AI写文章