在Python中,每个整数似乎都有一个10位数的id,从438开始。我试图找到一个与它的id相同的数字。我写了一个简单的代码来找到数字:
for i in range(4380000000,4390000000):
if i==id(i):
print(i)
else:
pass
当我第一次跑这个时,我没有这样的号码。然后我第二次运行它仍然没有数字。
当我第三次跑步时,我得到了一个号码:4384404848
然后我检查了id(4384404848)==4384404848
我是否False
。
为什么Python返回的数字不等于它的id?或者当程序运行和停止时,相同的数字是否有不同的ID?
(编辑:假设“每个整数似乎都有一个从438开始的10位数ID”是错误的。)
答案 0 :(得分:4)
https://docs.python.org/2/library/functions.html#id
在此生命周期内保证唯一且恒定。
将id视为为此对象计算的唯一标识符或“哈希”。每次运行程序时,它可能(并且很可能会)不同。
编辑:只是添加,如果您正在使用CPython实现(这是最受欢迎的),那么它就是内存中对象的地址。这应该澄清为什么在同一个程序的不同运行中它不一样。
作为一个单独的注释,除了对于给定运行的唯一性之外,您不应该依赖任何对象上的id()值。
每个整数似乎都有一个10位数的id,从438开始
是一个不正确的假设。在我的机器上:
>>> x = 5
>>> id(x)
38888712L
答案 1 :(得分:2)
并非始终以 438
您应该将其视为大学生或员工ID号码的唯一注册号码(但对于Python对象)
看看文档说的是什么
<强> ID(对象)强>
返回对象的“标识”。这是一个整数,在该生命周期内保证该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。
CPython实现细节:这是内存中对象的地址。
说清楚。我假设你知道,无论你创建了多少变量,如果它们保持相同的值,那么在Python中它们都是相同的。 (的别名强>)
看看翻译。
>>> a=10
>>> id(10)
26775680
>>> b=20
>>> id(20)
26775440
独特的权利。现在看,
>>> a=10
>>> b=10
>>> id(a)
26775680
>>> id(b)
26775680
另外,
>>> a=10
>>> id(a)
26775680
>>> a=20
>>> b=a
>>> id(a)
26775440
>>> id(b)
26775440
因此,每个值(对象)都会分配一个唯一值。这个价值只不过是你的 id()。
自OP问以来!
含义:
Python的“实现”应该被理解为一种程序或环境,它为用Python语言编写的程序的执行提供支持,如CPython参考实现所表示的。
那么这意味着Cpython是运行Python代码(语言)的语言引擎。为什么它被命名为Cpython?将Python(语言)与Cpython(实现)区分开来。
所以基本上Cpython是最常见的Python实现(CPython:用C语言编写,通常简称'Python')你从python.org下载的那个是 < / p>
您需要区分语言和实现。 Python是一种语言。
根据维基百科,
“编程语言是编写程序的符号,它是计算或算法的规范”。
这意味着它只是编写代码的规则和语法。另外我们有一个
编程语言实现 在大多数情况下,它是实际的解释器或编译器。
所以CPython - 用C实现
有Jython - Java实现
IronPython - 在C#中实施
还有一些。在这里查看它们Implementations。下载并搞砸他们了解更多。
答案 2 :(得分:-1)
根据官方文件:
返回对象的“标识”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。
因此,从本质上讲,Python中任何对象的id都是一个哈希值,它的生命周期是唯一的。
为什么Python返回的数字不等于它的id?或者当程序运行和停止时,相同的数字是否有不同的ID?
您发现'i'的哈希值为4384404848,但是将其与文字'4384404848'的哈希值进行比较。根据定义,它们必须不同。