Как распечатать адрес памяти переменной в Python 2.7?
Я знаю, что id() возвращает "id" переменной или объекта, но это не возвращает ожидаемый стиль 0x3357e182, который я ожидал увидеть для адреса памяти.
Я хочу сделать что-то вроде print &x
, где x - это переменная типа С++, например.
Как я могу это сделать в Python?
Адрес памяти для печати переменной Python
Ответ 1
id
- это метод, который вы хотите использовать: чтобы преобразовать его в hex:
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))
Это дало мне одинаковые пары даже для больших целых чисел.
Ответ 2
Невозможно получить адрес памяти значения в 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
или аналогичный.
Ответ 3
В соответствии с руководство, в CPython id()
находится фактический адрес памяти переменной. Если вы хотите его в шестнадцатеричном формате, назовите hex()
на нем.
x = 5
print hex(id(x))
это напечатает адрес памяти x.