遍历python的对象子树并计算子树的总大小(深度大小)。

objsize的Python项目详细描述


对象化

python对象子树遍历与计算 子树的总大小(深度大小)。

此模块使用python内部gc实现 穿越所有的死者。 它忽略类型对象(即isinstance(o, type)) 例如类和模块,因为它们在所有对象中都是通用的。 它的实现不需要递归调用以获得最佳性能。

功能

  • 计算单个/多个对象的深度大小。
  • 排除非独占对象。
  • 遍历单个/多个对象子树。

Pympler还支持通过pympler.asizeof()确定对象深度大小。 在objsizepympler之间有两个主要的区别。

  1. objsize具有其他功能:
    • 遍历对象子树:逐个遍历对象的所有子代。
    • 排除非独占对象。也就是说,也从程序中的其他地方引用的对象。对于计算对象的深度大小和遍历其子对象,这是正确的。
  2. objsizepympler相比,它有一个简单而健壮的实现,代码行明显更少。 pMyPrdor实现使用递归,因此必须使用最大深度参数来避免达到Python的最大深度。 objsize,然而,使用bfs,这是更有效和更简单的遵循。 此外,pympler实现小心地处理任何对象类型。 objsize用一个简单且通用的实现来存档相同的目标,该实现具有较少的代码行。

安装

pip install objsize

基本用法

计算包含其所有成员的对象大小。

>>>importobjsize>>>objsize.get_deep_size(dict(arg1='hello',arg2='world'))348

可以通过传递多个参数来计算多个对象的深度大小:

>>>objsize.get_deep_size(['hello','world'],dict(arg1='hello',arg2='world'),{'hello','world'})652

复杂数据

objsize可以计算对象的整个子树的大小 不管它的对象类型和深度。

例如,这里有一个复杂的数据结构,其中包括一个自引用:

my_data=(list(range(3)),list(range(3,6)))classMyClass:def__init__(self,x,y):self.x=xself.y=yself.d={'x':x,'y':y,'self':self}def__repr__(self):return"MyClass"my_obj=MyClass(*my_data)

我们可以计算my_obj深度大小,包括它存储的数据。

>>>objsize.get_deep_size(my_obj)796

我们可能希望忽略非独占对象,例如存储在my_data中的对象。

>>>objsize.get_exclusive_deep_size(my_obj)408

遍历

用户可以在整个子树上实现自己的功能 使用遍历方法,该方法遍历子树中的所有对象。

>>>foroinobjsize.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}210543

与以前类似,可以忽略非独占对象。

>>>foroinobjsize.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}

许可证

GPL

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用DBFlow进行迁移?   java无法从socket读取数据   java在JButton上使用鼠标运动监听器?   元素的java ArrayList链接和get IndexOutOfBoundsException   javascript如何在Java脚本中从ajax调用解析JSON对象   从数据库中获取信息并将其写入JTable。错误:java。lang.IndexOutOfBoundsException:索引:2,大小:2   spring如何使用Java SpringBoot在FCM推送通知中向IOS发送图像通知   java jsoup:解析某个标记的数据,该标记恰好位于某个特定标记之后   java没有HashMap的等式依赖于EntrySet。钥匙套?   未按预期评估java Maven属性(osmavenplugin)   类Java向ArrayList添加了用户输入,需要用另一个ArrayList中的变量分隔   JavaJSF丰富:每行呈现的数据列表?   集合Java 8按属性区分   在Java中,是否可以(静态)导入构造函数或局部变量?   安卓在ubuntu 10上安装java时出错64位   java是否应该hashCode()只使用equals()中使用的不可变字段的子集?   java如何创建ConcurrentMultiMap