理论问题
每一个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?你知道吗
关于
42
何时成为分配的id的问题:你可以把42
想象成int(42)
。它为值为42的整数分配内存。构造完整数后,它被传递给id()
函数。之后,整数的引用计数递减,因此释放。你知道吗从技术上讲,对象的id只是它在内存中的地址。你知道吗
你误解了任务的概念。你知道吗
在赋值时,将对象绑定到名称。分配给的所有名称都可以按所需的任何方式使用,未分配的名称不存在,因此不能指向任何内容(包括“无处”)。你知道吗
使用
id(spam)
可以请求spam
指向的对象,然后请求其ID不存在的名称
spam
没有分配给它的对象,该对象的ID可以被查询。你知道吗奥托,每个物体都有一个ID
我将试着一个一个地反驳这些误解。这可能有用,也可能无用。你知道吗
Python中没有“声明”对象的概念。因此,对象既不声明也不未声明。你知道吗
不能使用未创建的对象。所有存在的对象都有ID。你知道吗
True
和False
是存在的对象。他们有身份证。你知道吗当代码执行时,文本就变成了对象。字符的组合
{}
本质上是表示dict()
的快捷方式。创建的对象具有ID。你知道吗否。NameError是指当您试图使用尚未定义的名称时。你知道吗
错了,它没有“指向任何东西”。它还没有定义。它不能指向任何东西,它不存在。你知道吗
名称没有ID。对象具有ID。当你说
您没有要求提供名称
foo
的id。您需要的是名称foo被分配给的对象的id。如果现在重新分配foo,则会得到另一个id:对象的id保持不变,名称已重新分配。你知道吗
不,他们不是。你知道吗
相关问题 更多 >
编程相关推荐