sys.getsizeof
дает вам деталь реализации, по определению, и ни одна из этих деталей не гарантированно остаются стабильными между версиями или даже строит.
Вряд ли что-то существенное изменилось между 2.7.3 и 2.7.11; Комментарий ВАС о ширине символов, вероятно, объясняет несоответствие; в том числе внутренний хранитель NUL-терминатора, есть 12 символов в Hello World
, а для кодирования UCS4 потребуется еще 24 байта для их хранения, чем кодировка UCS2 (но взамен он может обрабатывать не BMP символов).
Другие вещи, которые могли бы изменить размер (в других обстоятельствах) были бы 32 против 64 бит строит (все указатели и ssize_t
с двойной в размере на 64 бит строит, как это делают long
с на машинах без Windows), Python 2 vs. Python 3 (Python 3 удалил единственное поле ширины указателя из заголовка общего объекта) и для str
, Python 3.2 (в котором используется опция сборки, указанная фиксированная ширина UCS2 или UCS4 str
, такая же, как Py2 unicode
) по сравнению с Python 3.3+ (который uses one of three different fixed widths depending on the largest ordinal in the str
, поэтому ASCII/latin-1 str
использует один байт на символ, BMP str
использует два, а не BMP str
использует четыре, но также может кэшировать альтернативные представления, поэтому тот же str
может увеличиваться или уменьшаться в «реальном «размер основан на использовании).
выглядит как UCS4 и UCS2 строит – YOU
@YOU да один был скомпилирован с UCS4 и другими с UCS2. Благодарю. – Saqib