Как я могу переработать вызов sys.getsizeof (dict), чтобы сохранить функциональность при использовании PyPy? - PullRequest
0 голосов
/ 08 мая 2019

Я хотел бы иметь возможность рассчитать количество байтов, занимаемых моим словарем при запуске моего кода с интерпретатором PyPy. Я заранее не знаю, какими будут ключи словаря, и не знаю, какими будут значения этих ключей. Вот что я знаю:

  • Все ключи будут иметь тип string
  • Количество ключей неизвестно
  • Все значения будут иметь тип string, int, double или None

Я понимаю, что нет прямых альтернатив sys.getsizeof() на основании объяснения, приведенного в сообщении об ошибке. Ответы, представленные здесь , по большей части, связаны с итеративными решениями, которые так или иначе реализуют sys.getsizeof().

Записи для словаря загружаются из файла JSON, поэтому они выглядят как некоторые разновидности этого формата:

{'a': 'hello', 'b': None, 'c': 20, 'd': 20.5}

Есть ли способ, которым я могу вычислить количество байтов, представляемых этим объектом, без использования sys.getsizeof()? Мне трудно найти решение, и я надеюсь кое-что понять здесь.

1 Ответ

1 голос
/ 09 мая 2019

Этот вопрос не имеет смысла в CPython, и еще меньше смысла в PyPy. В дополнение к соображениям общего состояния, размер может изменяться в зависимости от того, что находится в dict, и от того, может ли PyPy оптимизировать его (явные стратегии только для int-keys и другие), поэтому в общем случае он не будет постоянным при вызовах. до sys.getsizeof. См. страницу совместимости документации Pypy для получения дополнительной информации

...