每当我尝试运行程序时,相同的数字是否会改变它的id?

时间:2017-07-02 03:50:27

标签: python python-3.x python-3.6

在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”是错误的。)

3 个答案:

答案 0 :(得分:4)

https://docs.python.org/2/library/functions.html#id

  

在此生命周期内保证唯一且恒定。

将id视为为此对象计算的唯一标识符或“哈希”。每次运行程序时,它可能(并且很可能会)不同。

编辑:只是添加,如果您正在使用CPython实现(这是最受欢迎的),那么它就是内存中对象的地址。这应该澄清为什么在同一个程序的不同运行中它不一样。

作为一个单独的注释,除了对于给定运行的唯一性之外,您不应该依赖任何对象上的id()值。

  

每个整数似乎都有一个10位数的id,从438开始

是一个不正确的假设。在我的机器上:

>>> x = 5
>>> id(x)
38888712L

答案 1 :(得分:2)

NO

并非始终以 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的“实现”应该被理解为一种程序或环境,它为用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'的哈希值进行比较。根据定义,它们必须不同。