python-3.x - 绑定到浮点数的名称的标识与值的标识不同
问题描述
下面是让我困惑的代码:
y=3
id(3) # 1445555280
id(y) # 1445555280
y=3.1
id(3.1) # 132653722264
id(y) # 132653720656
为什么案例的身份相等,而第二种情况的身份不相等?
解决方案
因为
当前的实现为 -5 到 256 之间的所有整数保留一个整数对象数组,当您在该范围内创建一个 int 时,您实际上只是取回了对现有对象的引用。所以应该可以改变 1 的值。我怀疑 Python 在这种情况下的行为是未定义的。:-)”。
请参阅此处的 Python 文档,也就是说,只要您启动解释器,从 -5 到 256 的整数作为先决条件放入,它们是恒定的,这意味着id
如果解释器重新启动,它们的内部内存将改变。
浮点数,它不是普通整数对象,是动态创建的,并且在GC没有引用它之后将被回收。
因此,在您的情况下,整数将是相同的值,并且只有当您重新启动/另一个解释器并且浮点(字符串等)是动态创建时,它才会是另一个值,这意味着每次您创建一个变量或只是一个数字,如下所示:
y=3.1
x=3.1
3.1
解释器会要求一个新的记忆来回答你的命令,这就是为什么float
总是一个新的值。
推荐阅读
- c++ - 如何使此代码输出字符串中的实际文本而不是内存地址?
- javascript - 如何在我的模板中设置谷歌地图?
- python - 使用列名中的数字循环遍历列
- firebase - 如何使用 Firestore 实现“Twitter Feed 模式”
- python - 如何使用opencv使线条看起来像笔触?
- python - 如何在python上自行添加用户定义的函数?
- javascript - 正则表达式 \b 匹配带有特殊字符的字符串
- sql - 如果另一个字段为空白/空,则选择不返回任何记录/结果的查询
- elasticsearch - Elastic Search - empty array?
- ms-access - MS Access Query 中的通配符