2010-07-02 2 views

ответ

6

В Python str - это объект, поэтому нет гарантии, что он выглядит в памяти. Вероятно, он содержит некоторую дополнительную информацию, такую ​​как длина строки. В вашем случае размер этих «метаданных» составляет, по-видимому, 20 байтов.

Возможно, сам объект даже не содержит фактическую строку, а скорее указатель на нее. Если это так, в вашей ситуации фактическая строка, по-видимому, находится в 20 байтах после объекта.

В любом случае, это деталь реализации. Ни одно из этих действий не должно опираться ни на какой серьезный код.

+1

Точно верно. В Python 2.6 метаданные состоят из: (1) указателя на тип объекта, (2) счетчик ссылок, (3) размер строки, (4) кэшированное значение для хэша объекта и (5) флаг, указывающий, является ли эта строка интернированной или нет. В 4 байтах для каждого из этих полей (на 32-разрядной машине) это объясняет смещение в 20 байтов. –

+0

, тогда есть ли способ получить доступ к памяти строки? – zhanwu

+0

@Mark Dickinson, поэтому я могу всегда иметь буфер, если я делаю 20-байтовое смещение? Дело не только в том, что 20 работают для меня один раз, а дальше этого не будет, не так ли? – zhanwu

Смежные вопросы