Я пытаюсь точно/окончательно найти разницу в размерах между двумя разными классами в Python. Они оба являются новыми классами стилей, за исключением одного, не имеющего слотов. Я пробовал многочисленные тесты, чтобы определить их разницу в размерах, но они всегда оказываются идентичными в использовании памяти.Измерение размера объекта Точно в Python - Sys.GetSizeOf не работает
До сих пор я пробовал функции sys.GetSizeOf (obj) и heapy's heap() без положительных результатов. Тест-код ниже:
import sys
from guppy import hpy
class test3(object):
def __init__(self):
self.one = 1
self.two = "two variable"
class test4(object):
__slots__ = ('one', 'two')
def __init__(self):
self.one = 1
self.two = "two variable"
test3_obj = test3()
print "Sizeof test3_obj", sys.getsizeof(test3_obj)
test4_obj = test4()
print "Sizeof test4_obj", sys.getsizeof(test4_obj)
arr_test3 = []
arr_test4 = []
for i in range(3000):
arr_test3.append(test3())
arr_test4.append(test4())
h = hpy()
print h.heap()
Выход:
Sizeof test3_obj 32 Sizeof test4_obj 32 Partition of a set of 34717 objects. Total size = 2589028 bytes. Index Count % Size % Cumulative % Kind (class/dict of class) 0 11896 34 765040 30 765040 30 str 1 3001 9 420140 16 1185180 46 dict of __main__.test3 2 5573 16 225240 9 1410420 54 tuple 3 348 1 167376 6 1577796 61 dict (no owner) 4 1567 5 106556 4 1684352 65 types.CodeType 5 68 0 105136 4 1789488 69 dict of module 6 183 1 97428 4 1886916 73 dict of type 7 3001 9 96032 4 1982948 77 __main__.test3 8 3001 9 96032 4 2078980 80 __main__.test4 9 203 1 90360 3 2169340 84 type <99 more rows. Type e.g. '_.more' to view.>
Это все с Python 2.6.0. Я также попытался переопределить SizeOf методов класса, чтобы попытаться определить размер путем суммирования отдельных sizeofs, но это не дало никаких разные результаты:
class test4(object):
__slots__ = ('one', 'two')
def __init__(self):
self.one = 1
self.two = "two variable"
def __sizeof__(self):
return super(test4, self).__sizeof__() + self.one.__sizeof__() + self.two.__sizeof__()
Результаты с методом SizeOf переопределены:
Sizeof test3_obj 80 Sizeof test4_obj 80
Значение sizeof должно было определить, не может ли быть встроенный метод sizeof неправильно измерять размер переменных. –
Итак, что бы вы предложили, это лучший способ определить разницу в размерах между такими объектами простого иона? –
Это зависит от того, почему вы хотите знать размер. Какую проблему ты пытаешься решить? –