国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python基礎系列:初識python引用計數與弱引用

robin / 2966人閱讀

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

寫在前邊:

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

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

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

接下來進入主題:

先放上實例代碼:

我們創建一個用于測試的x對象,包括一個構造函數和一個析構函數。

第一次初始化x對象,并且用變量a來引用,所以這里的引用計數就為1。之后通過 getrefcount 來獲取引用數量,這里變為了2,因為調用函數 getrefcount 本身也是對a的一次引用。

接下來通過 weakref.ref() 創建一個弱引用,通過 getrefcount 打印引用計數后,發現計數并沒有改變。

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

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

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

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

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

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

一個應用程序如果持續地產生這種不可訪問的對象群組,就會發生內存泄漏。

所以弱引用很適合處理這種循環引用的場景。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42455.html

相關文章

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

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

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

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

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

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

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

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

    fredshare 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<