Как хранятся числа в python?
Как уже заметил Roman Kitaev, функция len() возвращает количество элементов в контейнере, в вашем случае символов в строке, а не количество байт занимаемых контейнером в памяти. Чтобы получить размер в байтах можно воспользоваться функцией getsizeof() модуля sys. И тут вас ждёт сюрпризIn [1]: import sys

In [2]: sys.getsizeof('ж')
Out[2]: 76
Символ 'ж' занимает не один байт и не два, а 76. Объясняется это тем, что в Python абсолютно всё - объекты. В данном случае 76 байт занимает объект строки, состоящий из одного символа. На уровне виртуальной машины объекты - это обычные Сишные структуры, содержащие данные и ряд служебных полей. В частности строка выглядит как-то так:typedef struct {
    long ob_refcnt;
    PyTypeObject *ob_type;
    size_t ob_size;

    long ob_shash;
    int ob_sstate;
    char ob_sval[1];
} PyStringObject;
а целое число такtypedef struct {
    long ob_refcnt;
    PyTypeObject *ob_type;
    size_t ob_size;

    long ob_digit[1];
} PyLongObject;
Тема управления памятью в Python очень глубокая, но как верно заметил sim3x, может запутать новичка.
Лучше, чем это, никто не скажет
https://github.com/python/cpython/blob/master/Obje...
len("ж") показывает длину строки (количество символов), а не то, сколько памяти она занимает в байтах.