2014-11-21 2 views
1

Я знаю, что в C символы 1 байт, а int - 4 байта. Когда я запускаю этот код в Python для определения хранения символов и целых чисел, я получаю неожиданные значения. Может ли кто-нибудь объяснить это несоответствие?Как символы и целые числа хранятся в Python

>>> sys.getsizeof(1) 
24 
>>> sys.getsizeof(10) 
24 
>>> sys.getsizeof(100) 
24 
>>> sys.getsizeof("a") 
38 
>>> sys.getsizeof("b") 
38 
>>> dump = cPickle.dumps(1) 
>>> sys.getsizeof(dump) 
41 
>>> >>> sys.getsizeof(chr(65)) 
38 
+5

В чем ваш вопрос? Лучше не беспокоиться о том, как типы Python сопоставляются с числами битов и байтов, если у вас нет конкретных причин для этого. Типы Python указаны в терминах API, определяющих, что вы можете с ними делать, а не с точки зрения конкретной реализации на уровне байтов. – BrenBarn

+0

@BrenBarn Мне нужно волноваться, как его отображение, я должен знать. – Hackaholic

+3

Зачем вам нужно знать? Что вы собираетесь делать с этой информацией? –

ответ

1

Прежде всего, у Python нет символьного типа, это строки, содержащие один символ. Во-вторых, для заголовка PyObject есть дополнительные накладные расходы, хотя некоторые базовые типы используют только часть его.

+0

да, она принимает как объект, но она должна иметь дело с char и int, это я не знаю об этом. – Hackaholic

+0

Нет, в Python нет ничего, что могло бы отображать тип char (помимо материала в CFFI специально для взаимодействия с C-кодом). – coderanger

+0

он должен, например, все на компьютере, либо 0, и 1, но python dosent занимает все в 0 и 1, это компилятор карты делает задачу. поэтому вы не можете просто оставить базу :) – Hackaholic