亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

robin / 3044人閱讀

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

寫在前邊:

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

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

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

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

先放上實(shí)例代碼:

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

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

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

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

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

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

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42455.html

相關(guān)文章

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

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

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

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

    huhud 評(píng)論0 收藏0
  • Jupyter Notebook之初識(shí)及入門

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

    plus2047 評(píng)論0 收藏0
  • Jupyter Notebook之初識(shí)及入門

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

    fredshare 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<