Traversal over Python's objects sub-tree and calculating the total size of the sub-tree (deep size).
Project description
objsize
Traversal over Python's objects sub-tree and calculating the total size of the sub-tree (deep size).
This module uses python internal GC implementation
to traverse all decedent objects.
It ignores type objects (i.e., isinstance(o, type)
)
such as classes and modules, as they are common among all objects.
It is implemented without recursive calls for best performance.
Features
- Calculate single/multiple object(s) deep size.
- Exclude non exclusive objects.
- Traverse single/multiple objects(s) sub tree.
Install
pip install objsize
Basic Usage
Calculate an object size including all its members.
>>> import objsize
>>> objsize.get_deep_size(dict(arg1='hello', arg2='world'))
348
It is possible to calculate the deep size of multiple objects by passing multiple arguments:
>>> objsize.get_deep_size(['hello', 'world'], dict(arg1='hello', arg2='world'), {'hello', 'world'})
652
Complex Data
objsize
can calculate the size of an object's entire sub-tree
regardless of the type of objects in it, and its depth.
Here is a complex data structure, for example, that include a self reference:
my_data = (list(range(3)), list(range(3,6)))
class MyClass:
def __init__(self, x, y):
self.x = x
self.y = y
self.d = {'x': x, 'y': y, 'self': self}
def __repr__(self):
return "MyClass"
my_obj = MyClass(*my_data)
We can calculate my_obj
deep size, including its stored data.
>>> objsize.get_deep_size(my_obj)
796
We might want to ignore non exclusive objects such as the ones stored in my_data
.
>>> objsize.get_exclusive_deep_size(my_obj)
408
Traversal
A user can implement its own function over the entire sub tree using the traversal method, which traverse all the objects in the sub tree.
>>> for o in objsize.traverse_bfs(my_obj):
... print(o)
...
MyClass
{'x': [0, 1, 2], 'y': [3, 4, 5], 'd': {'x': [0, 1, 2], 'y': [3, 4, 5], 'self': MyClass}}
[0, 1, 2]
[3, 4, 5]
{'x': [0, 1, 2], 'y': [3, 4, 5], 'self': MyClass}
2
1
0
5
4
3
Similirarly to before, non exclusive objects can be ignored.
>>> for o in objsize.traverse_exclusive_bfs(my_obj):
... print(o)
...
MyClass
{'x': [0, 1, 2], 'y': [3, 4, 5], 'd': {'x': [0, 1, 2], 'y': [3, 4, 5], 'self': MyClass}}
{'x': [0, 1, 2], 'y': [3, 4, 5], 'self': MyClass}
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for objsize-0.3.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 946ed42ff64ae8138019c21dc82a4b8090cf0f0efbea672556ab2881d38b3c23 |
|
MD5 | 62d332f30caf543cb9625a6c984095bd |
|
BLAKE2b-256 | 3760d824cd0974a49826d675a8ab6128867e0f7997f96e601b1c1af013407114 |