首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果python变量的id小于-6,它为什么会改变?

如果python变量的id小于-6,它为什么会改变?
EN

Stack Overflow用户
提问于 2019-05-10 10:06:03
回答 2查看 308关注 0票数 1

我刚刚在检查变量赋值的id时遇到了一种奇怪的行为。我运行了以下代码

代码语言:javascript
复制
a = -5
print(id(a))

并获得如下身份

代码语言:javascript
复制
140710231913104

在执行木星单元格时,我得到相同的id,如果是a >= -5,则执行多次,而如果指定并运行a < -5,则在执行木星单元后,每次都得到不同的id。在下面的图片中找到摘要

造成这种行为的原因是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-10 10:18:44

请看下面的示例:

代码语言:javascript
复制
>>> a=256
>>> b=256
>>> print(id(a),id(b))
(31765012, 31765012)
>>> 
>>> c=257
>>> d=257
>>> print(id(c),id(d))
(44492764, 44471284)
>>> 

这将帮助您理解整数的意外行为。每当您在范围-5到256范围内创建Int时,实际上只需返回对现有对象的引用。这在python中被称为Integer缓存。

票数 5
EN

Stack Overflow用户

发布于 2019-05-10 10:12:30

来自help(id)

id(obj )返回对象的标识。 这保证在同时存在的对象中是唯一的。(CPython使用对象的内存地址。)

对于小数字(不完全确定有多小),python只在内存中保存了每个数字的一个“版本”。这就是为什么每次分配-5时,都会得到相同的内存位置。当您分配-6时,地址会发生更改。如果你尝试一个更大的数字,你会得到不同的结果每次。示例:

代码语言:javascript
复制
>>> a = 9999999999999999999999; id(a)
140517821614080
>>> a = 9999999999999999999999; id(a)
140517821497216
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56075341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档