>> ob ={ 'x' : 1 , 'y' : 2 , 'z' : 3 } >>> x = ob [ 'x' ] >>> ob [ 'y' ]= y 但我們來看看它的內(nèi)存消耗: >>> print ( sys . getsizeof ( ob )) 240 這個數(shù)額看起來好像挺小,但是當你想要創(chuàng)造許多這樣的變量時就積少成多了:" />

chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python減少字典對象內(nèi)存大小的方法

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-03 15:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

程序執(zhí)行過程中,如果RAM中有大量的對象在運行,就可能會出現(xiàn)內(nèi)存問題,特別是在對可用內(nèi)存總量有限的情況下。

下面是一些減少字典對象內(nèi)存大小的方法,這些方法可以顯著減少對象所需的RAM大小。

字典

Python里用字典來表示結(jié)構(gòu)信息是非常方便的:

  1. >>> ob ={'x':1,'y':2,'z':3}

  2. >>> x = ob['x']

  3. >>> ob['y']= y

但我們來看看它的內(nèi)存消耗:

  1. >>>print(sys.getsizeof(ob))

  2. 240

這個數(shù)額看起來好像挺小,但是當你想要創(chuàng)造許多這樣的變量時就積少成多了:

對象數(shù)目內(nèi)存大小
1 000 000240 Mb
10 000 0002.40 Gb
100 000 00024 Gb

解決方案

用類實例來代替字典:

  1. classPoint:

  2. def __init__(self, x, y, z):

  3. self.x = x

  4. self.y = y

  5. self.z = z

  6. >>> ob =Point(1,2,3)

  7. >>> x = ob.x

  8. >>> ob.y = y

類實例各個部分的內(nèi)存大?。?/p>

FieldSize (bytes)
PyGC_Head24
PyObject_HEAD16
weakref8
dict8
TOTAL:56

如果你不是很了解類和實例,可以看廖雪峰的這篇文章:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017496031185408

這里的__weakref__是對這個對象的弱引用列表的引用,而__dict__是對類實例字典的引用,它包含實例屬性的值。從Python 3.3開始, 類的所有實例用共享空間存儲字典的keys. 這減少了內(nèi)存中實例的大小:

  1. >>>print(sys.getsizeof(ob), sys.getsizeof(ob.__dict__))

  2. 56 112

56+112=168 < 240. 因此,大量的類實例占用的內(nèi)存比普通字典(dict)要少:

實例數(shù)目大小
1 000 000168 Mb
10 000 0001.68 Gb
100 000 00016.8 Gb

字典占實例大小的百分比為112/168=67%, 我們還是可以看出,實例中字典的大小嚴重影響了RAM中實例的大小。下面有更好的方法。

帶__slots__的類實例

通過消除__dict__和weakref__,可以顯著減少RAM中的類實例的大小。用__slots__是有可能做到的:

  1. classPoint:

  2. __slots__ ='x','y','z'

  3. def __init__(self, x, y, z):

  4. self.x = x

  5. self.y = y

  6. self.z = z

  7. >>> ob =Point(1,2,3)

  8. >>>print(sys.getsizeof(ob))

  9. 64

RAM中的對象明顯變小:

FieldSize (bytes)
PyGC_Head24
PyObject_HEAD16
x8
y8
z8
TOTAL:64

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

實例數(shù)目大小
1 000 00064 Mb
10 000 000640 Mb
100 000 0006.4 Gb

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3170

    瀏覽量

    76092
  • 字典
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    7860
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4856

    瀏覽量

    89520
  • 儲存
    +關(guān)注

    關(guān)注

    3

    文章

    203

    瀏覽量

    22953
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    請問Nuclei Studio IDE怎么查看程序所用內(nèi)存大小?

    Nuclei Studio IDE 怎么查看程序所用內(nèi)存大小?比如使用TI CCS時可以在如圖中查看內(nèi)存使用情況?
    發(fā)表于 01-10 06:32

    Python元組和字典使用的基本方法

    Python學習:2、元組、字典使用的基本方法
    發(fā)表于 04-06 15:12

    STM32F103xx系列內(nèi)存大小

    寫在前面:本文章旨在總結(jié)備份、方便以后查詢,由于是個人總結(jié),如有不對,歡迎指正;另外,內(nèi)容大部分來自網(wǎng)絡、書籍、和各類手冊,如若侵權(quán)請告知,馬上刪帖致歉。目錄一、內(nèi)存大小二、STM32F103xx
    發(fā)表于 08-19 08:53

    python字典

    ': '張三'}3. 重要方法判斷key是否存在在 Python 2 中的字典對象有一個 has_key 函數(shù),可以用來判斷一個 key 是否在該
    發(fā)表于 02-23 16:54

    HarmonyOS如何獲取系統(tǒng)內(nèi)存大小和可用內(nèi)存?

    解決方案Harmony獲取內(nèi)存大小和Android類似的系統(tǒng)。SystemMemoryInfo systemMemoryInfo = new SystemMemoryInfo
    發(fā)表于 03-15 14:46

    python合并字典的 7 種方法

    1、最簡單的原地更新字典對象內(nèi)置了一個 update 方法,用于把另一個字典更新到自己身上。>>> profile = {"name": "
    發(fā)表于 04-08 15:11

    python中的字典(dict)對象以及其使用方法

    本文通過以英文的形式全面講解了python中的字典(dict)對象以及其使用方法。
    發(fā)表于 05-15 10:00 ?1次下載

    電腦內(nèi)存大小怎么查看

    日常辦公或者玩游戲的時候,都需要確認一下電腦內(nèi)存夠不夠運行將要辦公的軟件或者將要玩游戲的軟件,問題來了,怎么查看電腦內(nèi)存大小?現(xiàn)在給大家?guī)碓趺床榭措娔X內(nèi)存大小教程。
    發(fā)表于 05-27 10:13 ?4109次閱讀

    Linux:測試進程占用的虛擬內(nèi)存大小

    Linux:測試進程占用的虛擬內(nèi)存大小
    的頭像 發(fā)表于 06-23 09:23 ?3293次閱讀
    Linux:測試進程占用的虛擬<b class='flag-5'>內(nèi)存大小</b>

    python字典是什么

    ,則可以是任意對象 1. 創(chuàng)建字典 創(chuàng)建一個字典有三種方法 第一種方法 :先使用 dict() 創(chuàng)建空
    的頭像 發(fā)表于 02-23 16:54 ?3874次閱讀

    python實現(xiàn)合并字典方法

    字典對象內(nèi)置了一個 update 方法,用于把另一個字典更新到自己身上。
    的頭像 發(fā)表于 04-08 15:11 ?1383次閱讀

    Python序列的字典類型介紹

    字典 介紹 字典是“鍵值對”的無序可變序列,字典中的每個元素都是一個“鍵值對”,包含:“鍵對象”和“值對象”。 可以通過“鍵
    的頭像 發(fā)表于 03-08 17:35 ?1869次閱讀
    <b class='flag-5'>Python</b>序列的<b class='flag-5'>字典</b>類型介紹

    Go高性能-兩種內(nèi)存大小為0的數(shù)據(jù)類型

    Go 中的空結(jié)構(gòu)體 struct{}{} 的內(nèi)存大小等于 0,除此之外,還有別的數(shù)據(jù)類型內(nèi)存大小也等于 0 嗎?
    的頭像 發(fā)表于 05-22 17:33 ?1091次閱讀

    weblogic設置jvm內(nèi)存大小

    WebLogic是一種Java EE應用服務器,用于構(gòu)建和部署企業(yè)級Java應用程序。在配置WebLogic服務器時,設置JVM的內(nèi)存大小非常重要,這可以提高應用程序的性能和可靠性。本文將詳細介紹
    的頭像 發(fā)表于 12-05 14:44 ?4176次閱讀

    eclipse設置jvm內(nèi)存大小

    內(nèi)存大小,并對其背后的原理進行解釋。 JVM(Java虛擬機)是Java程序的運行環(huán)境,它負責將Java字節(jié)碼翻譯成機器碼,以便在不同的平臺上執(zhí)行。JVM使用內(nèi)存來存儲運行時對象和執(zhí)行過程中的臨時數(shù)據(jù)。如果JVM的
    的頭像 發(fā)表于 12-06 11:43 ?2897次閱讀