Python 2.7の変数のメモリアドレスを印刷するにはどうすればよいですか? id()が変数またはオブジェクトの 'id'を返すことは知っていますが、これは、メモリアドレスに対して予想される0x3357e182スタイルを返しません。私はprint &x
のようなことをしたいのですが、xは例えばC++ int変数です。 Pythonでこれを行うにはどうすればよいですか?
id
は使用するメソッドです。16進数に変換するには:
hex(id(variable_here))
例えば:
x = 4
print hex(id(x))
私にくれた:
0x9cf10c
どちらが欲しいですか?
(面白いことに、2つの変数を同じ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
はすでにアドレスを返しています。唯一の問題がその整数を特定の方法でフォーマットする方法である場合...any整数のフォーマットと同じです:
>>> hex(33)
0x21
>>> '{:#010x}'.format(33) # 32-bit
0x00000021
>>> '{:#018x}'.format(33) # 64-bit
0x0000000000000021
… 等々。
ただし、この理由はほとんどありません。実際にオブジェクトのアドレスが必要な場合は、おそらくctypes
などに渡す必要があります。その場合は、ctypes.addressof
などを使用する必要があります。
マニュアル によると、CPythonではid()
は変数の実際のメモリアドレスです。 16進形式で使用する場合は、hex()
を呼び出します。
x = 5
print hex(id(x))
これにより、xのメモリアドレスが出力されます。