久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

什么是Python自動化運(yùn)維內(nèi)部的引用計(jì)數(shù)?

今天小編要跟大家分享的文章是什么是Python自動化運(yùn)維內(nèi)部的引用計(jì)數(shù)?什么時(shí)候增加引用計(jì)數(shù)?什么時(shí)候減少引用計(jì)數(shù)?Python自動化入門新手和正在Python自動化學(xué)習(xí)的小伙伴快來看一看吧,希望能夠?qū)Υ蠹矣兴鶐椭?

Python內(nèi)部的引用計(jì)數(shù)(sys.getrefcount):

什么是引用計(jì)數(shù)器:?
Python內(nèi)部記錄著所有使用中的對象有多少引用。一個(gè)內(nèi)部跟蹤變量,稱為一個(gè)引用計(jì)數(shù)器。當(dāng)對象被創(chuàng)建時(shí),就創(chuàng)建了一個(gè)引用計(jì)數(shù),當(dāng)這個(gè)對象不再需要時(shí),也就是說,這個(gè)對象的引用計(jì)數(shù)變?yōu)?時(shí),它被垃圾回收。(這個(gè)只是形象的說一下,并不是嚴(yán)格的100%正確,但是通俗的理解往往是最好的學(xué)習(xí)方式)

增加引用計(jì)數(shù):

當(dāng)對象被創(chuàng)建并(將其引用)賦值給變量時(shí),該對象的引用技術(shù)就是被設(shè)置為1。
當(dāng)同一個(gè)對象的應(yīng)用或者是對象又被賦值給其他變量時(shí),或者作為參數(shù)傳遞給函數(shù),方法或類實(shí)例時(shí),或者被賦值為一個(gè)窗口對象的成員時(shí),該對象的一個(gè)新的引用,或者稱作別名,就被創(chuàng)建(則該對象的引用計(jì)數(shù)自動加1)

減少引用計(jì)數(shù)

當(dāng)對象的引用被銷毀時(shí),引用計(jì)數(shù)會減少。最明顯的例子就是當(dāng)引用離開其作用范圍時(shí),這種情況最經(jīng)常出現(xiàn)在函數(shù)運(yùn)行結(jié)束時(shí),所有局部變量都被自動銷毀,對象的引用計(jì)數(shù)也就隨之減少。

當(dāng)變量被賦值給另外一個(gè)對象時(shí),源對象的引用技術(shù)也會自動減1

其他造成對象的引用計(jì)數(shù)減少的方式包括使用del語句刪除一個(gè)變量,或者當(dāng)一個(gè)對象的引用計(jì)數(shù)在以下情況會減少:

  1. 一個(gè)本地引用離開了其作用范圍,比如函數(shù)結(jié)束
  2. 對象的別名被顯示的銷毀
  3. 對象的一個(gè)別名被賦值給其他的對象
  4. 對象被從一個(gè)窗口對象中移除
  5. 窗口對象本身被銷毀

例子:

import sys
a="ab"
sys.getrefcount("ab")
3 第一次結(jié)果為3
b="ab"
sys.getrefcount("ab")
4 第二次結(jié)果+1
b=0 b引用了其他的對象(0),對于"ab"來講就取消了一個(gè)引用
sys.getrefcount("ab")
3 結(jié)果在上次引用的基礎(chǔ)上-1

注意:在交互式解釋器中帶空格的對象引用次數(shù)永遠(yuǎn)為3,但是在腳本中回歸正常,例如:
#!/usr/bin/env Python

coding=utf8 fdaf

import sys
print sys.getrefcount("ab cd")
a="ab cd"
print sys.getrefcount("ab cd")
b="ab cd"
print sys.getrefcount("ab cd")
c=b
print sys.getrefcount("ab cd")

垃圾收集:
不再被使用的內(nèi)存會被一種稱為垃圾收集的機(jī)制釋放。像上面說的,雖然解釋器跟蹤對象的引用計(jì)數(shù),但是垃圾收集器負(fù)責(zé)釋放內(nèi)存。垃圾收集器是一塊獨(dú)立的代碼,它用來尋找引用計(jì)數(shù)為0的對象,他也負(fù)責(zé)檢查那些雖然引用計(jì)數(shù)大于0但也該被銷毀的對象。特定情形會導(dǎo)致循環(huán)引用。
一個(gè)循環(huán)引用發(fā)生在當(dāng)你有至少兩個(gè)對象互相引用時(shí),也就是所說的引用都消失時(shí),這些引用仍然存在,這說明只靠引用計(jì)數(shù)是不夠的。Python的垃圾收集器實(shí)際上是一個(gè)引用計(jì)數(shù)器和一個(gè)循環(huán)垃圾收集器。當(dāng)一個(gè)對象的引用計(jì)數(shù)變?yōu)?,解釋器會暫停,釋放掉這個(gè)對象和僅有這個(gè)對象可訪問的其他對象,作為引用計(jì)數(shù)的補(bǔ)充,垃圾收集器也會留心被分配的總量很大(以及未通過引用計(jì)數(shù)銷毀的那些) 的對象。在這種情況下,解釋器會暫停下來,試圖清理所有為引用的循環(huán)。

以上就是小編今天為大家分享的什么是Python自動化運(yùn)維內(nèi)部的引用計(jì)數(shù)的文章,希望本篇文章能夠?qū)φ?Python自動化學(xué)習(xí)?和從事Python自動化相關(guān)工作的小伙伴們有所幫助,想要了解更多相關(guān)知識記得關(guān)注馬哥教育官網(wǎng),每天都會有大量優(yōu)質(zhì)內(nèi)容與大家分享!免責(zé)聲明:內(nèi)容和圖片源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 罗山县| 闽侯县| 濉溪县| 榕江县| 湘乡市| 台江县| 扎鲁特旗| 永州市| 谷城县| 安溪县| 太仆寺旗| 洛扎县| 巩义市| 宿迁市| 伊宁县| 始兴县| 额济纳旗| 清涧县| 宝坻区| 德惠市| 莲花县| 札达县| 家居| 东城区| 永清县| 凌海市| 房产| 旅游| 广宁县| 怀远县| 左权县| 峨边| 兴义市| 平潭县| 报价| 依安县| 平江县| 南溪县| 楚雄市| 遵义县| 理塘县|