这个问题已经在这里有一个答案:
- 访问对象内存地址 8个回答
如何打印一个变量的内存地址在Python 2.7? 我知道ID()返回一个变量或对象的“身份证”,但这并不返回预期0x3357e182风格,我期待看到一个内存地址。 我想这样做print &x
,其中x是一个C ++ INT例如变量。 我怎样才能在Python这样做呢?
这个问题已经在这里有一个答案:
如何打印一个变量的内存地址在Python 2.7? 我知道ID()返回一个变量或对象的“身份证”,但这并不返回预期0x3357e182风格,我期待看到一个内存地址。 我想这样做print &x
,其中x是一个C ++ INT例如变量。 我怎样才能在Python这样做呢?
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))
这给了我相同的对,即使是大的整数。
有没有办法得到一个值的内存地址在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()
是变量的实际存储器地址。 如果你想在十六进制格式,调用hex()
就可以了。
x = 5
print hex(id(x))
这将打印x的内存地址。