@Boolman_gd

Замена dict^ов в питоне. Какие существуют аналоги?

Есть 1 большой словарь с конфигурацией, занимает он 5600 байтов (целых 5 кб), а состоит из 33 значений. Как можно уменьшить занимаемую память? Какие существуют для этого решения? (размер словаря замерил с помощью pympler.asizeof)
словарь выглядит следующим образом:
cipher = {
"й": "y",
"ц": "mq",
"у": "mx"
}

То есть у каждой русской буквы имеется своё значение на латыни, пишу GUI на android, хотелось бы снизить количество потребляемой оперативной памяти.
  • Вопрос задан
  • 195 просмотров
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
пишу GUI на android, хотелось бы снизить количество потребляемой оперативной памяти.

Не пишите на Python.
Ответ написан
Комментировать
@deliro
Словарь на 33 значения (сама структура) будет занимать примерно 1.2кб. Так будет примерно для любого языка, т.к. реализация словарей на базе хэш-таблиц (асимптотика O(1)) у всех плюс-минус похожая. Исключения составляют всякие словари на базе деревьев (асимптотика O(logN)). Но у словаря ещё есть содержимое — те самые 33 пары строк.

Ты конечно можешь запихать их в один кортеж длиной 66 (скажем, чётные индексы — ключи, нечётные — значения вида ("й", "y", "ц", "mq", "у", "mx", ...)) и получить сложность O(N) и сэкономить примерно 600 байт (т.к. кортеж на 66 элементов занимает примерно 600 байт), но содержимое у тебя никуда не денется. Ты даже можешь отсортировать пары по ключу и искать бинарным поиском за O(logN) "на халяву"

Но пытаться сэкономить сотню байт в питоне — это как заливать 92 бензин в феррари из-за того что он дешевле.
Ответ написан
Комментировать
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Можно сделать кортеж с латинскими значениями и выбирать оттуда по индексу, соответствующему коду кириллических символов со смещением.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Накладные расходы у словаря - минимальны.
Ну можете заменить на массив. У него накладных расходов почти нет вообще. Но если вы туда запихаете даже в 1 значение Войну и Мир - то он будет все равно занимать много места.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы