Python 当我尝试运行程序时,同一个号码是否正在更改其id?

Python 当我尝试运行程序时,同一个号码是否正在更改其id?,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,在Python中,每个整数似乎都有一个从438开始的10位id。我试图找到一个与其id相同的号码。我编写了一个简单的代码来查找该号码: for i in range(4380000000,4390000000): if i==id(i): print(i) else: pass 当我第一次运行这个时,我没有得到这样的号码。然后我第二次运行它,但仍然没有得到任何号码 当我第三次运行它时,我得到了一个号码:4384404848 然后我检查了id(43

在Python中,每个整数似乎都有一个从438开始的10位id。我试图找到一个与其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”是错误的。)

保证此对象在其生命周期内唯一且恒定

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

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

另请注意,除了给定运行的唯一性之外,您不应该依赖任何对象的id()值

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

这是一个错误的假设。在我的机器上:

>>> x = 5
>>> id(x)
38888712L
它并不总是以
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下载的就是这个

您需要区分语言和实现。Python是一种语言

根据维基百科

“编程语言是编写程序的符号,程序是计算或算法的规范”

这意味着它只是编写代码的规则和语法。另外我们有一个

程序设计语言实现 在大多数情况下,它是实际的解释器或编译器

So CPython-用C实现

在Java中有Jython-Implementation

IronPython-用C#实现


还有一些。看看这里。下载并与他们交流以了解更多信息。

我不认为这是真的。如果我输入
id(2)
,我会得到
42976384
。现在,如果我退出Python并再次输入
id(2)
,我会得到相同的数字。@AaryanDewan,这是因为CPython中的小整数被缓存,特别是在
-5
256
的范围内。因此,
2
的id认为每个程序都将指向在程序启动之前创建的相同的
2
CPython。如果您好奇,这里有一些更多信息:。请注意提到的部分:
当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,您实际上只需返回对现有对象的引用
这里有一个关于此的片段,我大约一年前从源代码本身复制了它。谢谢!你能告诉我什么是“CPython实现”吗?@aaryandwan CPython是用C编程语言编写的Python的默认实现。这是你从下载Python时得到的。我们称之为“CPython”,因为它不是Python的唯一实现。当我们说“实现”时,有像或这样的实现“,我们指的是用某种语言编写的解释器,它可以执行有效的Python代码。