日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python字典内存分析_Python减少字典对象占用的七成内存

發布時間:2025/4/5 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 112

56+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))

64

RAM中的對象明顯變小:

FieldSize (bytes)PyGC_Head24PyObject_HEAD16x8y8z8TOTAL:64

今日重點:在類定義中使用__slots__會顯著減少大量實例的內存占用

目前,這是大幅度減少RAM中類實例的內存占用的主要方法。相比于單純用字典,減少了(240-64)/240=73%的內存占用。

文章到此就結束啦,如果你喜歡今天的Python 教程,請持續關注Python實用寶典,如果對你有幫助,麻煩在下面點一個贊/在看哦

有任何問題都可以在下方留言區留言,我們會耐心解答的!

?Python實用寶典 (pythondict.com)

不只是一個寶典

歡迎關注公眾號:Python實用寶典

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的python字典内存分析_Python减少字典对象占用的七成内存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。