日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
如何使用弱引用優(yōu)化Python程序的內存占用?

 Python 的垃圾回收機制通過引用計數來決定一個對象要不要被回收。當一個對象被引用次數為0時,它就會被作為垃圾回收從而釋放 Python 內存。

但有些情況下,我們的代碼可能在不經意間導致某些實際上我們不再使用的對象的引用計數始終大于0,從而無法被垃圾回收。

我們舉個例子:

很多人喜歡使用字典來存放一些數據,假設我現在有一個字典是這樣的:

 
 
 
  1. animal = {'Monkey': monkey_obj, 'Tiger': tiger_obj, 'Panda': panda_obj}

其中monkey_obj, tiger_obj, panda_obj都是對象。在我們的程序中,可能會傳入不同的字符串來讀取不同的對象。當我們把這些對象放進字典中的時候,它的引用計數已經被+1了。

但是,panda_obj這個對象比較特殊,它只會在程序運行的早期被查出來使用1次。之后就再也不會使用了。

但由于這個對象被放在字典里面,所以這個對象的引用計數始終大于0,Python 的垃圾回收機制就會認為這個對象還會被使用,于是它就會始終占用內存。

在數據處理領域或者圖像處理領域,經常會出現字典的值占用大量內存的情況,這種情況就會導致內存的浪費。

為了解決這種情況,我們可以使用 Python 自帶的weakref模塊,它里面有一個WeakValueDictionary,就是用來處理這種情況的。

我們來看看如何使用它:

 
 
 
  1. import weakref
  2. class Panda:
  3.     def __init__(self, name):
  4.         self.name = name
  5.     
  6.     def walk(self):
  7.         print('我是一只熊貓,正在走路')
  8. class Tiger:
  9.     pass
  10. class Monkey:
  11.     pass
  12. panda = Panda('xyz')
  13. tiger = Tiger()
  14. Monkey = Monkey()
  15. weak_dict = weakref.WeakValueDictionary()
  16. weak_dict['Panda'] = panda
  17. weak_dict['Tiger'] = tiger
  18. weak_dict['Monkey'] = moneky

使用 weak_dict 就像使用普通的字典一樣。但賦值時,值的引用計數不會改變。

這樣當我們在其他地方刪除panda這個字典時,就不會由于字典占用了一個引用計數而導致無法被垃圾回收問題。


標題名稱:如何使用弱引用優(yōu)化Python程序的內存占用?
標題路徑:http://www.dlmjj.cn/article/dhgdioi.html