成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用弱引用優(yōu)化 Python 程序的內(nèi)存占用?

開發(fā) 后端
Python 的垃圾回收機(jī)制通過引用計(jì)數(shù)來決定一個對象要不要被回收。當(dāng)一個對象被引用次數(shù)為0時,它就會被作為垃圾回收從而釋放 Python 內(nèi)存。

 Python 的垃圾回收機(jī)制通過引用計(jì)數(shù)來決定一個對象要不要被回收。當(dāng)一個對象被引用次數(shù)為0時,它就會被作為垃圾回收從而釋放 Python 內(nèi)存。

[[314349]]

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

我們舉個例子:

很多人喜歡使用字典來存放一些數(shù)據(jù),假設(shè)我現(xiàn)在有一個字典是這樣的:

 

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

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

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

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

在數(shù)據(jù)處理領(lǐng)域或者圖像處理領(lǐng)域,經(jīng)常會出現(xiàn)字典的值占用大量內(nèi)存的情況,這種情況就會導(dǎo)致內(nèi)存的浪費(fèi)。

為了解決這種情況,我們可以使用 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.  
  9. class Tiger: 
  10.     pass 
  11.  
  12.  
  13. class Monkey: 
  14.     pass 
  15. panda = Panda('xyz'
  16. tiger = Tiger() 
  17. Monkey = Monkey() 
  18.  
  19.  
  20. weak_dict = weakref.WeakValueDictionary() 
  21. weak_dict['Panda'] = panda 
  22. weak_dict['Tiger'] = tiger 
  23. weak_dict['Monkey'] = moneky 

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

這樣當(dāng)我們在其他地方刪除panda這個字典時,就不會由于字典占用了一個引用計(jì)數(shù)而導(dǎo)致無法被垃圾回收問題。

責(zé)任編輯:華軒 來源: 未聞Code
相關(guān)推薦

2013-09-16 16:48:50

Android優(yōu)化軟引用

2014-07-03 09:39:34

Java內(nèi)存分析mat工具

2013-08-19 17:14:04

.Net強(qiáng)引用弱引用

2009-06-16 11:26:22

弱引用內(nèi)存泄露

2020-06-17 14:10:01

Python內(nèi)存程序

2020-12-02 09:01:40

Java基礎(chǔ)

2010-07-22 11:09:33

SQL Server內(nèi)

2021-10-08 21:00:52

數(shù)據(jù)弱引用對象

2015-11-02 17:20:00

Java弱引用

2021-12-09 15:45:09

Python弱引用代碼

2024-05-20 08:58:13

Java引用類型垃圾回收器

2021-01-07 14:20:55

JavaGC

2022-01-02 06:55:08

Node.js ObjectWrapAddon

2020-06-23 09:48:09

Python開發(fā)內(nèi)存

2018-11-16 16:10:28

JavaOOM編程語言

2022-10-30 13:21:58

谷歌Chrome瀏覽器

2021-01-15 06:54:54

Python內(nèi)存程序

2009-06-19 16:19:23

Java對象引用

2017-11-15 19:30:08

Python內(nèi)存泄露循環(huán)引用

2021-10-18 15:50:49

Android強(qiáng)引用軟引用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜视频一区二区 | 在线免费黄色小视频 | 亚洲成人激情在线观看 | 国产精品一二三区 | 欧美精品一区二区三区蜜桃视频 | 7777在线视频 | 久久久免费在线观看 | 成人在线免费观看 | 国产精品久久久久久久久久久免费看 | 亚洲欧美成人在线 | 艹逼网 | 国产欧美一区二区三区在线看蜜臀 | 亚洲品质自拍视频网站 | 一区二区三区不卡视频 | 亚洲欧洲av在线 | 99成人| 伊色综合久久之综合久久 | 精品少妇一区二区三区在线播放 | 亚洲欧洲成人av每日更新 | 亚洲精品久久久 | 91在线电影 | 久久久久久久av麻豆果冻 | 欧美一级大片 | 亚洲一区成人 | 日本久久www成人免 成人久久久久 | 91新视频 | 国产午夜久久久 | 国产精品视频在线播放 | 欧美一区2区三区4区公司 | 国产精品久久久久久婷婷天堂 | 国产丝袜一区二区三区免费视频 | 国产女人第一次做爰毛片 | 天天干夜夜操 | 国产精品欧美精品 | 亚洲天堂av在线 | 久久夜夜| 国产精品亚洲一区二区三区在线观看 | 天天干免费视频 | 国产亚韩 | 日韩视频在线一区 | 久操伊人 |