欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python如何為創(chuàng)建大量實例節(jié)省內(nèi)存

 更新時間:2018年03月20日 17:07:27   作者:北門吹雪  
這篇文章主要為大家詳細介紹了python如何為創(chuàng)建大量實例節(jié)省內(nèi)存,具有一定的參考價值,感興趣的小伙伴們可以參考一下

python如何為創(chuàng)建大量實例節(jié)省內(nèi)存,具體內(nèi)容如下

案例:

  某網(wǎng)絡(luò)游戲中,定義了玩家類Player(id, name, status,....),每有一個在線玩家,在服務(wù)器程序內(nèi)有一個Player的實例,當(dāng)在線人數(shù)很多時,將產(chǎn)生大量實例(百萬級別)

  需求:

         如何降低這些大量實例的內(nèi)存開銷?

如何做?

       首先要明白,python中的類可以動態(tài)的添加屬性,實則在內(nèi)存中有個__dict__方法維護了這種動態(tài)添加屬性,它占有內(nèi)存,把它關(guān)掉,不就達到省內(nèi)存要求了?

#!/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)
  # 動態(tài)裝配屬性
  player_1.money = 10000
  player_1.__dict__['time'] = time.time()
  print(player_1.__dict__)
  print(player_1.money, player_1.time)
   
  print('_' * 100)
  # 打印__dict__占用的內(nèi)存空間
  print('dict方法占用內(nèi)存:', sys.getsizeof(player_1.__dict__))
   
  print('_'*100)
  # 動態(tài)刪除屬性
  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__屬性,發(fā)現(xiàn)沒有,就無法動態(tài)的裝配類屬性,達到省內(nèi)存的目的
  try:
    print(player_1.__dict__)
  except Exception as e:
    print(e)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中cv2.Canny() 函數(shù)使用方法

    Python中cv2.Canny() 函數(shù)使用方法

    cv2.Canny() 函數(shù)是 OpenCV 中的邊緣檢測函數(shù)之一,用于檢測圖像的邊緣,它的基本原理是通過計算圖像中每個像素點的梯度值來檢測邊緣,本文通過示例代碼介紹Python中cv2.Canny() 函數(shù)用法,需要的朋友參考下吧
    2023-07-07
  • 使用Python腳本和ADB命令實現(xiàn)卸載App

    使用Python腳本和ADB命令實現(xiàn)卸載App

    這篇文章主要介紹了使用Python腳本和ADB命令實現(xiàn)卸載App的實現(xiàn)方法,文中給出了完整的示例代碼,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • 如何使用python請求傳遞csrftoken

    如何使用python請求傳遞csrftoken

    這篇文章主要介紹了如何使用python請求傳遞csrftoken問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python Pygame實戰(zhàn)之憤怒的小鳥游戲?qū)崿F(xiàn)

    Python Pygame實戰(zhàn)之憤怒的小鳥游戲?qū)崿F(xiàn)

    《憤怒的小鳥》其實活得還不錯,盡管我們一直在嘲笑它的IP帝國夢做得太大。但要知道,把休閑益智游戲的生意做到這個份上的,恐怕也就獨此一家了。本文將利用Pygame實現(xiàn)這一游戲,需要的可以參考一下
    2022-04-04
  • 詳解python列表生成式和列表生成式器區(qū)別

    詳解python列表生成式和列表生成式器區(qū)別

    這篇文章主要介紹了python(列表生成式/器),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python如何實現(xiàn)異步調(diào)用函數(shù)執(zhí)行

    python如何實現(xiàn)異步調(diào)用函數(shù)執(zhí)行

    這篇文章主要介紹了python如何實現(xiàn)異步調(diào)用函數(shù)執(zhí)行,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python機器學(xué)習(xí)NLP自然語言處理基本操作新聞分類

    Python機器學(xué)習(xí)NLP自然語言處理基本操作新聞分類

    本文是Python機器學(xué)習(xí)NLP自然語言處理系列文章,開始我們自然語言處理 (NLP) 的學(xué)習(xí)旅程. 本文主要學(xué)習(xí)NLP自然語言處理基本操作新聞分類
    2021-09-09
  • python 中文亂碼問題深入分析

    python 中文亂碼問題深入分析

    一直以來,python中的中文編碼就是一個極為頭大的問題,經(jīng)常拋出編碼轉(zhuǎn)換的異常,python中的str和unicode到底是一個什么東西呢?
    2011-03-03
  • Python函數(shù)中參數(shù)是傳遞值還是引用詳解

    Python函數(shù)中參數(shù)是傳遞值還是引用詳解

    這篇文章主要介紹了深入了解Python函數(shù)中參數(shù)是傳值還是傳引用,在 C/C++ 中,傳值和傳引用是函數(shù)參數(shù)傳遞的兩種方式,在Python中參數(shù)是如何傳遞的,需要的朋友可以參考下
    2019-07-07
  • python pyenv多版本管理工具的使用

    python pyenv多版本管理工具的使用

    這篇文章主要介紹了python pyenv多版本管理工具的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論