python如何為建立大量例項節省記憶體

2022-10-04 20:09:17 字數 1712 閱讀 1401

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...