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

欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

3天內不再提示

Python減少字典對象內存大小的方法

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-03 15:21 ? 次閱讀

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

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

字典

Python里用字典來表示結構信息是非常方便的:

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

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

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

但我們來看看它的內存消耗:

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

  2. 240

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

對象數(shù)目內存大小
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

類實例各個部分的內存大?。?/p>

FieldSize (bytes)
PyGC_Head24
PyObject_HEAD16
weakref8
dict8
TOTAL:56

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

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

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

  2. 56 112

56+112=168 < 240. 因此,大量的類實例占用的內存比普通字典(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中的對象明顯變?。?/p>

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

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

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

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

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

    關注

    8

    文章

    3063

    瀏覽量

    74374
  • 字典
    +關注

    關注

    0

    文章

    13

    瀏覽量

    7724
  • python
    +關注

    關注

    56

    文章

    4809

    瀏覽量

    85071
  • 儲存
    +關注

    關注

    3

    文章

    201

    瀏覽量

    22450
收藏 人收藏

    評論

    相關推薦

    請問Nuclei Studio IDE怎么查看程序所用內存大小?

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

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

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

    STM32F103xx系列內存大小

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

    python字典

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

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

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

    python合并字典的 7 種方法

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

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

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

    電腦內存大小怎么查看

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

    Linux:測試進程占用的虛擬內存大小

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

    python字典是什么

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

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

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

    Python序列的字典類型介紹

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

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

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

    weblogic設置jvm內存大小

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

    eclipse設置jvm內存大小

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