python如何為建立大量例項節省記憶體,具體內容如下
案例:某網路遊戲中,定義了玩家類player(id, name, status,....),每有乙個**玩家,在伺服器程式內有乙個player的例項,當**人數很多時,將產生大量例項(百萬級別)
需求:如何降低這些大量例項的記憶體開銷?
如何做?
首先要明白,python中的類可以動態程式設計客棧的新增屬性,實則在記憶體中有個__dict__方法維護了這種動態新增屬性,它占有記憶體,把它關掉,不就達到省記憶體要求了?
#!/usr/bin/python3
import time
import sys
class player(object):
def __init__(self, id, name, status):
self.id = id
self.name = name
self.status = status
if __name__ == '__main__':
player_1 = player(1, 'bei_bei', '上線')
print(player_1.__dict__)
print('_' * 100)
# 動態裝配屬性
player_1.money = 10000
player_1.__dict__['time'] = time.time()
print(player_1.__dict__)
print(player_1.money, player_1.time)
print('_' * 100)
# 列印__dict__占用的記憶體空間
print('dict方法占用記憶體:', sys.getsizeof(player_1.__dict__))
print('_'*100)
# 動態刪除屬性
print(player_1.__dict__)
del player_1.__dict__['time']
del player_1.money
print(player_1.__dict__)
通過__slots__屬性,宣告例項屬性名字的列表
#!/usr/bin/python3
class player(object):
# 通過slots方法指定類的定長屬性
__slots__ = ['id', 'name程式設計客棧', 'status']
def __init__(self, id, name, status):
self.id = id
self.name = name
self.status = status
if __name__ == '__main_程式設計客棧_':
player_1 = player(1, 'bei_bei', '上線')
print(player_1.id, player_1.name, player_1.status)
# 嘗試輸出__dict__屬性,發現沒有,就無法動態的裝配類屬性,達到省記憶體的目的
try:www.cppcns.com
print(player_1.__dict__)
except exception as e:
print(e)
本文標題: python如何為建立大量例項節省記憶體
本文位址: /jiaoben/python/223262.html
當建立大量例項如何節省記憶體
當程式需要建立大量的例項時,那麼程式就會占用大量的記憶體,我們想要節省記憶體的話該怎麼做呢?在類中使用 slots 屬性 class date slots year month day def init self,year,month,day self.year year self.month mo...
如何為mysql建立索引
前些時候,一位頗高階的程式設計師居然問我什麼叫做索引,令我感到十分的驚奇,我想這絕不會是滄海一粟,因為有成千上萬的開發者 可能大部分是使用mysql的 都沒有受過有關資料庫的正規培訓,儘管他們都為客戶做過一些開發,但卻對如何為資料庫建立適當的索引所知較少,因此我起了寫一篇相關文章的念頭。最普通的情況...
如何為資料庫建立索引
sql 2010 12 15 16 46 54 閱讀41 字型大小 大 中小訂閱 接著,來個稍微複雜一點的,如果有個order by字句呢?不管你信不信,大多數的資料庫在使用order by的時候,都將會從索引中受益。select from mytable where category id 1 a...