Расскажу что сегодня узнал про то как хранятся строки в Python 3:
Во первых это unicode (почитайте про utf-8)
1) если вся строка latin1 хранит в одном байте один символ
2) если есть хотя бы один символ из базовой плоскости unicode каждый символ строки 2 байта
3) если есть хотя бы один символ из не базовой плоскости(смайлики например) все хранится в 4 байтах
4) вспомогательные символы utf-8 обрезаются, в частности сравнения строк, и именно поэтому вся строка хранится в одном виде(1, 2 или 4 байта)
5) скажу пожалуй и очевидную вещь, помимо символов строки хранится еще ее хеш, и размер, возможно что то еще, ну то есть пустая строка может занимать порядка 40 байт
Post #449
306