如何在Python 2.7中打印变量的内存地址?
我知道id()返回变量或对象的'id',但这不会返回我期望看到的内存地址的预期0x3357e182样式。
我想做一些像print &x
这样的事情,其中x是一个C ++ int变量。
我怎么能用Python做到这一点?
答案 0 :(得分:107)
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))
这给了我相同的配对,即使对于大整数也是如此。
答案 1 :(得分:8)
一般来说,无法在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
或类似地址。
答案 2 :(得分:5)