当python给我一个对象在内存中的位置时,除了区分交互式提示中的实例之外,还有什么呢?
示例:
>>>inspect.walktree
<function walktree at 0x2a97410>
答案 0 :(得分:5)
这只是没有__repr__
魔术方法的对象的默认表示。
事实上,地址除了“区分实例”之外别无其他目的。
答案 1 :(得分:5)
如果您在未定义magic repr(obj)
方法的对象上调用__repr__
(或未覆盖从{{1继承的默认实现),则返回此默认字符串表示形式在新式对象的情况下)。
该默认字符串的目的是为程序员提供有关底层对象的类型和标识的有用信息。
在内部,调用object
函数来获取字符串中包含的数字:
id
请注意,>>> o = object()
>>> o
<object object at 0x7fafd75d10a0>
>>> id(o)
140393209204896
>>> "%x" % id(o)
'7fafd75d10a0'
不代表唯一ID。可能会发生这样的情况:在程序的生命周期中,几个对象将具有相同的ID(尽管从不在同一时间)。
它也不必与内存中对象的位置相关联(尽管它在CPython中也是如此)。
您可以通过以下方式轻松覆盖您自己的类的表示字符串:
id
答案 2 :(得分:1)
这是一个实现细节,您不应该依赖它:
$ python
>>> import inspect
>>> inspect.walktree
<function walktree at 0x7f07899c9230>
>>> id(inspect.walktree)
139670350238256
$ jython
>>> import inspect
>>> inspect.walktree
<function walktree 1>
>>> id(inspect.walktree)
1
显示的数字只是一个标识,可用于使用is
运算符进行测试,以检查两个对象是否相同。如前所述,无论该数字是否是内存位置,都是一个实现细节。