Python 当我尝试运行程序时,同一个号码是否正在更改其id?
在Python中,每个整数似乎都有一个从438开始的10位id。我试图找到一个与其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
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代码。