成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python基礎(chǔ)系列:初識python引用計數(shù)與弱引用

robin / 2976人閱讀

摘要:第一次初始化對象,并且用變量來引用,所以這里的引用計數(shù)就為。接下來通過創(chuàng)建一個弱引用,通過打印引用計數(shù)后,發(fā)現(xiàn)計數(shù)并沒有改變。由于一次僅能有一個對象被回收,引用計數(shù)無法回收循環(huán)引用的對象。所以弱引用很適合處理這種循環(huán)引用的場景。

寫在前邊:

之前的socket系列就告一段落,主要是對自己所學(xué)做一個總結(jié)與記錄。

接下來我打算基于libevent寫一個支持并發(fā)的HTTP服務(wù)器。因為之前學(xué)習(xí)群里大神早就開發(fā)過一個同時支持HTTP與WebSocket的服務(wù)器,我看了之后感覺很有興趣,所以才買了本網(wǎng)絡(luò)編程的書來看。我打算參考他的來寫一個精簡版,

只支持HTTP。等寫完了可以分享給大家,雖然不能運用到生產(chǎn)環(huán)境,但是我相信學(xué)習(xí)完源碼之后對于自己也是一個極大的提升。

接下來進(jìn)入主題:

先放上實例代碼:

我們創(chuàng)建一個用于測試的x對象,包括一個構(gòu)造函數(shù)和一個析構(gòu)函數(shù)。

第一次初始化x對象,并且用變量a來引用,所以這里的引用計數(shù)就為1。之后通過 getrefcount 來獲取引用數(shù)量,這里變?yōu)榱?,因為調(diào)用函數(shù) getrefcount 本身也是對a的一次引用。

接下來通過 weakref.ref() 創(chuàng)建一個弱引用,通過 getrefcount 打印引用計數(shù)后,發(fā)現(xiàn)計數(shù)并沒有改變。

w() is a 這句的意思是判斷這兩個實例是不是完全相同,也就是占用的內(nèi)存地址是否相同。

然后我們通過 del a 來解除a對x對象的引用,注意這里del并不是直接回收x對象,而是解除了引用,我們知道一旦一個變量的引用為0的時候就會被回收。所以調(diào)用del之后x對象被回收。

通過之前的代碼我們看到,調(diào)用弱引用的方式為類函數(shù)的方式。不過可以使用proxy來改為使用變量名的方式調(diào)用。

到這里我相信對于弱引用的使用方式肯定都掌握了。但是弱引用到底有什么作用呢?

與很多其它的高級語言一樣,Python也有垃圾回收機制。每個對象都有一個引用計數(shù),當(dāng)這個計數(shù)為0的時候才能夠安全地銷毀這個對象。

由于一次僅能有一個對象被回收,引用計數(shù)無法回收循環(huán)引用的對象。一組相互引用的對象若沒有被其它對象直接引用,并且不可訪問,則會永久存活下來。

一個應(yīng)用程序如果持續(xù)地產(chǎn)生這種不可訪問的對象群組,就會發(fā)生內(nèi)存泄漏。

所以弱引用很適合處理這種循環(huán)引用的場景。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42455.html

相關(guān)文章

  • 能讓你更早下班的Python垃圾回收機制

    摘要:內(nèi)部通過引用計數(shù)機制來統(tǒng)計一個對象被引用的次數(shù)。下一步,就該被我們的垃圾回收器給收走了。而我們垃圾回收機制只有當(dāng)引用計數(shù)為的時候才會釋放對象。以空間換時間的方法提高垃圾回收效率。 人生苦短,只談風(fēng)月,談什么垃圾回收。據(jù)說上圖是某語言的垃圾回收機制。。。我們寫過C語言、C++的朋友都知道,我們的C語言是沒有垃圾回...

    pumpkin9 評論0 收藏0
  • Python基礎(chǔ)題目大全,測試你的水平,鞏固知識(含答案)

    摘要:里,有兩種方法獲得一定范圍內(nèi)的數(shù)字返回一個列表,還有返回一個迭代器。在引用計數(shù)的基礎(chǔ)上,還可以通過標(biāo)記清除解決容器對象可能產(chǎn)生的循環(huán)引用的問題。列舉常見的內(nèi)置函數(shù)的作用,過濾函數(shù),循環(huán)函數(shù)累積函數(shù)一行代碼實現(xiàn)乘法表。 showImg(https://segmentfault.com/img/remote/1460000019294205); 1、為什么學(xué)習(xí)Python? 人生苦短?人間...

    huhud 評論0 收藏0
  • Jupyter Notebook之初識及入門

    摘要:所以,應(yīng)該直接了當(dāng)?shù)陌惭b,其中也會自動安裝上,作為其運行的。這只是一開始,之后還有里各種找不到外部安裝的的情況。終于,意識到這些方法都是錯誤的思路。這才知道原來是無法識別。 為什么要用IPython/Jupyter? python里面調(diào)試確實有點煩惱,尤其是在vim里,想要嘗試一些簡單的編碼問題,實在是有點麻煩,不想到命令行模式一行一行執(zhí)行,也不想再新建一個文件測試一個簡單的功能。 而...

    plus2047 評論0 收藏0
  • Jupyter Notebook之初識及入門

    摘要:所以,應(yīng)該直接了當(dāng)?shù)陌惭b,其中也會自動安裝上,作為其運行的。這只是一開始,之后還有里各種找不到外部安裝的的情況。終于,意識到這些方法都是錯誤的思路。這才知道原來是無法識別。 為什么要用IPython/Jupyter? python里面調(diào)試確實有點煩惱,尤其是在vim里,想要嘗試一些簡單的編碼問題,實在是有點麻煩,不想到命令行模式一行一行執(zhí)行,也不想再新建一個文件測試一個簡單的功能。 而...

    fredshare 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<