Как я могу проверить использование памяти объектов в iPython?

Вы можете попробовать что-то вроде этого:

f = input("Enter Temperature in Fahrenheit: ");

fah = float(f);

cel = (fah-32)/1.8;

print("Temperature in Celsius =",cel);
34
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

К сожалению, это не возможно, но существует много способов приблизить ответ:

  1. для очень простых объектов (например, ints, строки, плавания, удваиваются), которые представлены более или менее, поскольку простой язык C вводит Вас, может просто вычислить число байтов как с решение .

  2. John Mulder Для более сложных объектов, которые хорошее приближение должно сериализировать объект к строке с помощью cPickle.dumps. Длина строки является хорошим приближением объема памяти, требуемого хранить объект.

существует одно большое препятствие с решением 2, которое является, что объекты обычно содержат ссылки на другие объекты. Например, dict содержит строковые ключи и другие объекты как значения. Те другие объекты могли бы быть совместно использованы. Так как рассол всегда пытается сделать полную сериализацию объекта, это будет всегда переоценивать объем памяти, требуемый хранить объект.

52
ответ дан Community 27 November 2019 в 16:18
поделиться

ОБНОВЛЕНИЕ: Вот другой , возможно, более полный рецепт для оценки размера объекта Python.

Вот поток рассматривание подобного вопроса

, предложенное решение состоит в том, чтобы записать Вашему собственному... использование некоторых оценок известного размера примитивов, объект Python наверху и размеры созданных в контейнерных типах.

, Так как код не то, что долго, вот прямая копия его:

def sizeof(obj):
    """APPROXIMATE memory taken by some Python objects in 
    the current 32-bit CPython implementation.

    Excludes the space used by items in containers; does not
    take into account overhead of memory allocation from the
    operating system, or over-allocation by lists and dicts.
    """
    T = type(obj)
    if T is int:
        kind = "fixed"
        container = False
        size = 4
    elif T is list or T is tuple:
        kind = "variable"
        container = True
        size = 4*len(obj)
    elif T is dict:
        kind = "variable"
        container = True
        size = 144
        if len(obj) > 8:
            size += 12*(len(obj)-8)
    elif T is str:
        kind = "variable"
        container = False
        size = len(obj) + 1
    else:
        raise TypeError("don't know about this kind of object")
    if kind == "fixed":
        overhead = 8
    else: # "variable"
        overhead = 12
    if container:
        garbage_collector = 8
    else:
        garbage_collector = 0
    malloc = 8 # in most cases
    size = size + overhead + garbage_collector + malloc
    # Round to nearest multiple of 8 bytes
    x = size % 8
    if x != 0:
        size += 8-x
        size = (size + 8)
    return size
14
ответ дан John Mulder 27 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: