python 記憶體大小及消耗

2021-10-08 00:02:54 字數 2234 閱讀 7121

當例項執行過多時,會消耗大量的記憶體,如何去降低這些大量例項的記憶體開銷呢?

解決方案:定義了 __slots__屬性,宣告例項有哪些屬性(關閉動態繫結)

首先定義兩個方法,作為兩個例項

class

player

(object):

def__init__

(self,uid,name, status)

: self.uid = uid

self.name = name

self.status = status

class

player2

(object):

# 元組的記憶體消耗 比列表小

__slots__ =

("uid"

,"name"

,"status"

)def

__init__

(self,uid,name, status)

: self.uid = uid

self.name = name

self.status = status

# 主程式入口

if __name__ ==

'__main__'

: p1= player(

"1",,1

) p2 = player2(

"2",

"good",1

)

列印其屬性:兩者相差乙個,使用集合相減,可以看到差了哪乙個:

# print(dir(p1))

# print(dir(p2))

# print(len(dir(p1))) # 29

# print(len(dir(p2))) # 28

'''集合 ----》差集

weakref 弱引用

dict 動態繫結屬性

'''# print(set(dir(p1)) - set(dir(p2))) #

也可以給兩個例項新增屬性和刪除屬性

# 動態為p1新增屬性

p1.__dict__[

"level"]=

1print

(p1.__dict__)

# 動態刪除屬性

del p1.__dict__[

"level"

]print

(p1.__dict__)

'''p2不能動態繫結屬性 由於__slots__唯讀

'''# print(p2.__dict__) # 報錯

# p2.level = 1 # 不能動態繫結 報錯

# p2.__slots__ = (1,) # 報錯 唯讀

`

sys模組可以檢視例項的記憶體大小

import sys

print

(sys.getsizeof(p1.__dict__)

)# 240

import tracemalloc    #  跟蹤記憶體使用情況

tracemalloc.start(

)# 開始跟蹤記憶體分配

# pla_1 = [player(1, 2, 3) for i in range(10000)] # size=1722 kib,

pla_2 =

[player2(1,

2,3)

for i in

range

(10000)]

# size=711 kib,

snapshot = tracemalloc.take_snapshot(

)# 快照 當前記憶體分配

top = snapshot.statistics(

"filename"

)# 快照物件統計 檢測檔案

for start in top[:10

]:# 是指前10個快照

print

(start)

使用__dict__字典主要是為了提公升查詢效率,所以必須使用空間換時間,少量的例項,使用字典儲存,問題不大。但如果是數百萬個例項,字典的總空間就比較大。__slote__相當於告訴直譯器,例項的屬性都叫什麼,而且既然需要節省記憶體,推薦定義時使用元組,而不是列表

slots__不影響子類例項,不會繼承,除非子類裡面自己定義了__slots.

Redis記憶體大小及淘汰策略

目錄 redis占用記憶體大小 redis的記憶體淘汰 如何獲取及設定記憶體淘汰策略 lru演算法 lru在redis中的實現 lfu演算法 我們知道redis是基於記憶體的key value資料庫,因為系統的記憶體大小有限,所以我們在使用redis的時候可以配置redis能使用的最大的記憶體大小。...

位元組,字元及占用記憶體大小情況

一 位元組 的定義 位元組 byte 是一種計量單位,表示資料量多少,它是計算機資訊技術用於計量儲存容量的一種計量單位。二 字元 的定義 字元是指計算機中使用的文字和符號,比如1 2 3 a b c 等等。三 位元組 與 字元 它們完全不是乙個位面的概念,所以兩者之間沒有 區別 這個說法。不同編碼裡...

enum的記憶體大小

enum在記憶體中占用多少儲存空間,為什麼在使用enum型別的時候不用寫上enum的名字呢,想struct一樣呼叫?在網上搜尋了一下,找到了想要的結論!enum定義類似與下面這樣 enum color 用起來可能像這樣 color color red switch color 先說為什麼red,不能...