Python减少字典对象占用的七成内存 |
您所在的位置:网站首页 › python获取字典 › Python减少字典对象占用的七成内存 |
程序执行过程中,如果RAM中有大量的对象在运行,就可能会出现内存问题,特别是在对可用内存总量有限的情况下。 下面是一些减少字典对象内存大小的方法,这些方法可以显著减少对象所需的RAM大小。 字典在Python里用字典来表示结构信息是非常方便的: >>> ob = {'x':1, 'y':2, 'z':3} >>> x = ob['x'] >>> ob['y'] = y但我们来看看它的内存消耗: >>> print(sys.getsizeof(ob)) 240这个数额看起来好像挺小,但是当你想要创造许多这样的变量时就积小成多了: 解决方案用类实例来代替字典: class Point: def __init__(self, x, y, z): self.x = x self.y = y self.z = z >>> ob = Point(1,2,3) >>> x = ob.x >>> ob.y = y类实例各个部分的内存大小: 如果你不是很了解类和实例,可以看廖雪峰的这篇文章。这里的__weakref__是对这个对象的弱引用列表的引用,而__dict__是对类实例字典的引用,它包含实例属性的值。从Python 3.3开始, 类的所有实例用共享空间存储字典的keys. 这减少了内存中实例的大小: >>> print(sys.getsizeof(ob), sys.getsizeof(ob.__dict__)) 56 11256+112=168 < 240. 因此,大量的类实例占用的内存比普通字典(dict)要少: 字典占实例大小的百分比为112/168=67%, 我们还是可以看出,实例中字典的大小严重影响了RAM中实例的大小。 带__slots__的类实例通过消除__dict__和weakref__,可以显著减少RAM中的类实例的大小。用__slots__是有可能做到的: class Point: __slots__ = 'x', 'y', 'z' def __init__(self, x, y, z): self.x = x self.y = y self.z = z >>> ob = Point(1,2,3) >>> print(sys.getsizeof(ob)) 64RAM中的对象明显变小: FieldSize (bytes)PyGC_Head24PyObject_HEAD16x8y8z8TOTAL:64 今日重点:在类定义中使用__slots__会显著减少大量实例的内存占用 目前,这是大幅度减少RAM中类实例的内存占用的主要方法。相比于单纯用字典,减少了(240-64)/240=73%的内存占用。 文章到此就结束啦,如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦 有任何问题都可以在下方留言区留言,我们会耐心解答的! Python实用宝典 (pythondict.com)不只是一个宝典欢迎关注公众号:Python实用宝典 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |