未声明的对象何时获得ID?

2024-04-25 22:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

理论问题

每一个Python shell都有不需要声明或创建就可以使用的对象,例如True、False、“、[]、{},以及整数和浮点数的任意组合。你知道吗

这意味着在任何时候,你都可以得到他们的身份证。你知道吗

id(1)
id(42)
id('')

等等

当然,如果您尝试获取未声明对象的id,则会得到:

id(myobject1)

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    id(myobject1)
NameError: name 'myobject1' is not defined

因为myobject1没有指向任何东西,所以它没有定义,也没有id

然而,有无限多的对象可以不用声明就可以使用,因为数字系统是无限的。因此,不可能所有未声明的对象在程序中以某种容量使用之前都有id。你知道吗

这些对象何时获得分配的ID?你知道吗


Tags: 对象idfalsetrue声明most整数shell
3条回答

关于42何时成为分配的id的问题:你可以把42想象成int(42)。它为值为42的整数分配内存。构造完整数后,它被传递给id()函数。之后,整数的引用计数递减,因此释放。你知道吗

从技术上讲,对象的id只是它在内存中的地址。你知道吗

你误解了任务的概念。你知道吗

在赋值时,将对象绑定到名称。分配给的所有名称都可以按所需的任何方式使用,未分配的名称不存在,因此不能指向任何内容(包括“无处”)。你知道吗

使用id(spam)可以请求spam指向的对象,然后请求其ID

不存在的名称spam没有分配给它的对象,该对象的ID可以被查询。你知道吗

奥托,每个物体都有一个ID

我将试着一个一个地反驳这些误解。这可能有用,也可能无用。你知道吗

Every Python shell has objects that can be used without being declared

Python中没有“声明”对象的概念。因此,对象既不声明也不未声明。你知道吗

or created

不能使用未创建的对象。所有存在的对象都有ID。你知道吗

True, False

TrueFalse是存在的对象。他们有身份证。你知道吗

"", [], {}, and any combination of integers and floating point numbers.

当代码执行时,文本就变成了对象。字符的组合{}本质上是表示dict()的快捷方式。创建的对象具有ID。你知道吗

Of course, if you try to get the id of an undeclared object, you get NameError.

否。NameError是指当您试图使用尚未定义的名称时。你知道吗

Since myobject1 points to nothing

错了,它没有“指向任何东西”。它还没有定义。它不能指向任何东西,它不存在。你知道吗

and has no id.

名称没有ID。对象具有ID。当你说

>>> foo = 5
>>> id(foo)
137396064

您没有要求提供名称foo的id。您需要的是名称foo被分配给的对象的id。如果现在重新分配foo,则会得到另一个id:

>>> bar = foo
>>> foo = "string"
>>> id(foo)
3075254336
>>> id(bar)
137396064

对象的id保持不变,名称已重新分配。你知道吗

Yet, there are an infinite number of objects which could be used without declaration

不,他们不是。你知道吗

相关问题 更多 >