遍历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如何调试Quarkus/SmallRye客户端请求   安卓找不到R.layout。主要活动中的主要活动。JAVA   java使复制的图像都独立旋转   java需要一双新眼睛来找出为什么我的四边形没有被着色   java记录方法调用,包括参数,以便在程序执行后可以执行这些参数   JavaSpringMVC+AngularJS向数据库添加多个条目   java删除具有重复字段值的entrySet对象   为什么我们无法解密使用ECB/PKCS1使用RSA加密在python中加密的java数据   并行处理java。util。同时发生的拒绝执行异常,等待终止   java/groovy使用指定的值从列表中收集元素   java在spring webproject中使用CSS和JS   在以下任何来源中都找不到java插件[id:'com.gradle.enterprise',版本:'3.2']   在java中知道时间是否已经过去的日期   java如何在JavaFX中为两个节点之间的2D曲线箭头设置动画   JAVAsql。SQLException:第1行“IdentitCAT”列的整数值“Guitare”不正确   如何获取使用数组删除的元素详细信息。使用couchbase Java SDK的asList(remove())?   ssl得到了JAVA例外:JAVA。安全spec.InvalidKeySpecException:未知的KeySpec类型   多线程Java扫描器输入在单独的线程中