import ctypes
a = 'abc'
b = ctypes.string_at(id(a), 3)
c = ctypes.string_at(id(a) + 20, 3)
Я ожидаю, что результат b будет «abc», но это не так; и результатом c является «abc». Я не знаю почему. Кто-нибудь может мне объяснить?Почему идентификатор (строка) не возвращает адрес строки
Точно верно. В Python 2.6 метаданные состоят из: (1) указателя на тип объекта, (2) счетчик ссылок, (3) размер строки, (4) кэшированное значение для хэша объекта и (5) флаг, указывающий, является ли эта строка интернированной или нет. В 4 байтах для каждого из этих полей (на 32-разрядной машине) это объясняет смещение в 20 байтов. –
, тогда есть ли способ получить доступ к памяти строки? – zhanwu
@Mark Dickinson, поэтому я могу всегда иметь буфер, если я делаю 20-байтовое смещение? Дело не только в том, что 20 работают для меня один раз, а дальше этого не будет, не так ли? – zhanwu