当Python为您提供对象的内存位置时,它的含义是什么?

Joh*_*ann 3 python

当python给我一个对象在内存中的位置时,除了区分交互式提示中的实例之外,还有什么呢?

例:

>>>inspect.walktree
<function walktree at 0x2a97410>
Run Code Online (Sandbox Code Playgroud)

Ole*_*pin 5

这只是没有__repr__魔术方法的对象的默认表示.

实际上,地址除了"区分实例"之外别无其他目的.


Nik*_* B. 5

如果您调用repr(obj)未定义魔术__repr__方法的对象(或者未覆盖object从新样式对象继承的默认实现),则返回此默认字符串表示形式.

该默认字符串的目的是为程序员提供有关底层对象的类型和标识的有用信息.

附加信息

在内部,id调用该函数以获取字符串中包含的数字:

>>> o = object()
>>> o
<object object at 0x7fafd75d10a0>
>>> id(o)
140393209204896
>>> "%x" % id(o)
'7fafd75d10a0'
Run Code Online (Sandbox Code Playgroud)

请注意,id它不代表唯一ID.可能会发生这样的情况:在程序的生命周期中,几个对象将具有相同的ID(尽管从不在同一时间).它也不必与内存中对象的位置相关联(尽管它在CPython中也是如此).

您可以通过以下方式轻松覆盖您自己的类的表示字符串:

class MyClass(object):
  def __repr__(self):
    return "meaningful representation (or is it?)"
Run Code Online (Sandbox Code Playgroud)