当你在Python中调用object.__repr__()方法时,你会得到类似这样的结果:
< __main__。测试对象位于0x2aba1c0cf890>
如果你重载__repr__(),除了调用super(Class, obj).__repr__()和reexing它,有没有任何方法来获得内存地址?
当你在Python中调用object.__repr__()方法时,你会得到类似这样的结果:
< __main__。测试对象位于0x2aba1c0cf890>
如果你重载__repr__(),除了调用super(Class, obj).__repr__()和reexing它,有没有任何方法来获得内存地址?
当前回答
只使用
id(object)
其他回答
只使用
id(object)
如果__repr__重载,你可以考虑__str__来查看变量的内存地址。
下面是Moshe Zadka在StackOverflow中__repr__和__str__的细节。
你可以通过以下方法得到适合这个目的的东西:
id(self)
只是为了响应Torsten,我无法在常规python对象上调用addressof()。此外,id(a) != addressof(a)。这是在CPython中,其他什么都不知道。
>>> from ctypes import c_int, addressof
>>> a = 69
>>> addressof(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: invalid type
>>> b = c_int(69)
>>> addressof(b)
4300673472
>>> id(b)
4300673392
Python手册对id()是这样说的:
返回一个对象的“标识”。 这是一个整数(或长整数) 哪个保证是唯一的 常量 一生。两个对象 不重叠的生命周期可能有 相同的id()值。(注:实现 这是对象的地址。)
在CPython中,这是对象的地址。不过,其他任何Python解释器都没有这样的保证。
请注意,如果您正在编写一个C扩展,您可以完全访问Python解释器的内部结构,包括直接访问对象的地址。