Я провожу эксперимент с тем, сколько памяти тратит каждый из типов массивов Python, а это list
, tuple
, set
, dict
, np.array
.Тогда я получил следующий результат.
![The amount of memory Python array types spend](https://i.stack.imgur.com/wOYZO.png)
(ось x - длина массива, ось y - объем памяти.)
Я обнаружил, что объем памяти, который тратит Python set
, увеличивается пошагово (также dict
), тогда как объем памяти других увеличивается линейно, как я и ожидал.Интересно, что отличает их?
Я использовал следующую get_size()
функцию.( ссылка )
def get_size(obj, seen = None):
size = sys.getsizeof(obj)
if seen is None:
seen = set()
obj_id = id(obj)
if obj_id in seen:
return 0
seen.add(obj_id)
if isinstance(obj, dict):
size += sum([get_size(v, seen) for v in obj.values()])
size += sum([get_size(k, seen) for k in obj.keys()])
elif hasattr(obj, '__dict__'):
size += get_size(obj.__dict__, seen)
elif hasattr(obj, '__iter__') and not isinstance(obj, (str, bytes, bytearray)):
size += sum([get_size(i, seen) for i in obj])
return size
И я измерил память от длины 0 до 10000 с интервалом в 100 интервалов.
мой код: https://repl.it/repls/WanEsteemedLines