brn*_*792 70 python memory-address
如何在Python 2.7中打印变量的内存地址?我知道id()返回变量或对象的'id',但这不会返回我期望看到的内存地址的预期0x3357e182样式.我想做类似的事情,例如print &x,x是C++ int变量.我怎么能用Python做到这一点?
Bla*_*ble 137
id 是您要使用的方法:将其转换为十六进制:
hex(id(variable_here))
例如:
x = 4
print hex(id(x))
Run Code Online (Sandbox Code Playgroud)
给我:
0x9cf10c
Run Code Online (Sandbox Code Playgroud)
这是你想要的,对吧?
(有趣的是,将两个变量绑定到同一个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))
Run Code Online (Sandbox Code Playgroud)
这给了我相同的配对,即使对于大整数也是如此.
一般来说,无法在Python 2.7中获取值的内存地址.在Jython或PyPy中,实现甚至不知道你的值的地址(并且甚至不能保证它将保持在同一个地方 - 例如,垃圾收集器被允许在需要时移动它).
但是,如果您只关心CPython,id则已经返回该地址.如果唯一的问题是如何以某种方式格式化该整数...它与格式化任何整数相同:
>>> hex(33)
0x21
>>> '{:#010x}'.format(33) # 32-bit
0x00000021
>>> '{:#018x}'.format(33) # 64-bit
0x0000000000000021
Run Code Online (Sandbox Code Playgroud)
… 等等.
然而,这几乎没有充分的理由.如果你确实需要一个对象的地址,那么可能是将它传递给ctypes或类似的,在这种情况下你应该使用ctypes.addressof或类似.
根据手册,CPython id()是变量的实际内存地址.如果您想要十六进制格式,请调用hex()它.
x = 5
print hex(id(x))
Run Code Online (Sandbox Code Playgroud)
这将打印x的内存地址.
| 归档时间: |
|
| 查看次数: |
118127 次 |
| 最近记录: |