Я только что прочитал PEP 393 и узнал, что тип Python str использует разные внутренние представления в зависимости от содержимого. Итак, я немного поэкспериментировал и был немного удивлён результатами:
Код: Выделить всё
>>> sys.getsizeof('')
41
>>> sys.getsizeof('H')
42
>>> sys.getsizeof('Hi')
43
>>> sys.getsizeof('Ö')
61
>>> sys.getsizeof('Öl')
59
Я понимаю, что в первых трех случаях строки не содержат символов, отличных от ASCII, поэтому можно использовать кодировку с 1 байтом на символ. Помещение в строку символа, отличного от ASCII, например Ö, заставляет интерпретатор использовать другую кодировку. Поэтому я не удивлен, что «Ö» занимает больше места, чем «H».
Однако почему «Öl» занимает меньше места, чем «Ö»? Я предположил, что любое внутреннее представление, используемое для 'Öl', позволяет использовать еще более короткое представление 'Ö'.
Я, по-видимому, использую Python 3.12 его невозможно воспроизвести в более ранних версиях.
Подробнее здесь:
https://stackoverflow.com/questions/789 ... han-%c3%96