打印Pythonvariables的内存地址

如何在Python 2.7中打印variables的内存地址? 我知道id()返回variables或对象的“id”,但是这不会返回我期待看到的内存地址的预期0x3357e182样式。 我想要做一些类似print &x事情,例如x是一个C ++ intvariables。 我怎样才能在Python中做到这一点?

id是您要使用的方法:将其转换为hex:

hex(id(variable_here))

例如:

 x = 4 print hex(id(x)) 

给我:

 0x9cf10c 

这是你想要的,对吧?

(有趣的是,将两个variables绑定到同一个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)) 

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

一般来说,没有办法在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或类似的。

根据手册 ,在CPython中id()是variables的实际内存地址。 如果你想要它的hex格式,请调用hex()

 x = 5 print hex(id(x)) 

这将打印x的内存地址。