Большой размер типов данных. Python
Общий вопрос:
Почему в Python объекты "привычных" типов данных столько весят?
>>> sys.getsizeof(int())
12
>>> sys.getsizeof(bool())
12
>>> sys.getsizeof(str())
25
>>> sys.getsizeof("")
25
>>> sys.getsizeof(" ")
26
>>> sys.getsizeof(float())
16
То есть интересует какие именно элементы класса занимают лишнюю память.
Конкретные вопросы:
- Где находятся конструкторы классов
int,str,bool... (директория/файл)? - В чем смысл
bool, если он весит столько же, сколько иint? При проверке условияif cond: ...после приведения типовtype(cond)==boolилиint?
PS Возможно вопросы туповаты, но уж очень любопытно) Быть может кто-то знает секреты ресурсоемкой питоновской магии.
Ответы (1 шт):
12 байт от переменной занимает структура PyVarObject. Но в зависимости от типа там может быть ещё куча указателей.
int в Питоне имеет динамический размер, питон подбирает что использовать (int32,int64) в зависимости от величины
>>> sys.getsizeof(9223372036854775807)
36
>>> sys.getsizeof(1)
28
>>> sys.getsizeof(0)
24
bool занимает 4 байта так как это наследования типа из Си. Плюс PyTypeObject.
>>> sys.getsizeof(True)
28
Также как и в Си boolean это int.
>>> True==1
True
>>> True+True
2
>>>
Не char а int потому, что из-за выравнивания памяти в языке и в процессоре int работает быстрее других типов.
У меня 64битная ОС, поэтому указатели 8 байтные (24 вместо 12).