打印 Python 变量的内存地址

如何在 Python 2.7中打印变量的内存地址? 我知道 id ()返回变量或对象的“ id”,但是它并没有返回我希望看到的内存地址的0x3357e182样式。 我想做一些类似于 print &x的操作,例如 x 是一个 C + + int 变量。 我如何在 Python 中做到这一点?

240031 次浏览

id是您要使用的方法: 将其转换为十六进制:

hex(id(variable_here))

例如:

x = 4
print hex(id(x))

给了我:

0x9cf10c

这就是你想要的,对吧?

(有趣的是,将两个变量绑定到相同的 int可能会导致使用相同的内存地址。)
试试:

x = 4
y = 4
w = 9999
v = 9999
a = 12345678
b = 12345678
print hex(id(x))
print hex(id(y))
print hex(id(w))
print hex(id(v))
print hex(id(a))
print hex(id(b))

这给了我相同的对,即使是大整数。

根据 手册,在 CPythonid()是变量的实际内存地址。如果你想要它的十六进制格式,调用它的 hex()

x = 5
print hex(id(x))

这将打印 x 的内存地址。

在 Python 2.7中,通常无法获取值的内存地址。在 Jython 或 PyPy 中,实现甚至不知道你的值的地址(甚至不能保证它会停留在同一个地方ーー例如,如果垃圾收集器愿意,它可以移动它)。

但是,如果您只关心 CPython,id已经返回了地址。如果唯一的问题是如何以某种方式格式化这个整数... ... 这与格式化 任何整数是一样的:

>>> hex(33)
0x21
>>> '{:#010x}'.format(33) # 32-bit
0x00000021
>>> '{:#018x}'.format(33) # 64-bit
0x0000000000000021

诸如此类。

然而,这几乎从来没有一个好的理由。如果您实际上需要一个对象的地址,可能需要将其传递给 ctypes或类似的对象,在这种情况下,应该使用 ctypes.addressof或类似的对象。