上節(jié)課我們說(shuō)了,定義變量其實(shí)就是在內(nèi)存里開(kāi)辟了一個(gè)內(nèi)存空間,然后把內(nèi)存空間的一個(gè)地址捆綁給了一個(gè)變量名,通過(guò)這個(gè)變量名我們就可以找到這個(gè)對(duì)應(yīng)的值在哪。現(xiàn)在我們要知道,定義變量首要占用內(nèi)存空間的,但內(nèi)存空間大小是有限的。
這時(shí)候就是涉及到一個(gè)問(wèn)題,你申請(qǐng)了內(nèi)存空間要用沒(méi)關(guān)系,但是如果你不用了的話,一定要記得把內(nèi)存空間給釋放出來(lái),不然的話你申請(qǐng)了如果還不用,那你就在白白浪費(fèi)內(nèi)存資源,導(dǎo)致計(jì)算機(jī)內(nèi)存可能就被占滿了。
就有那種很垃圾的程序,它占用一堆內(nèi)存空間又不釋放,最后又把內(nèi)存空間給撐爆了,這就叫做內(nèi)存溢出。為了防止這種問(wèn)題,咱們寫程序的時(shí)候,你定義變量申請(qǐng)內(nèi)存空間,一定要記住,用了以后要把內(nèi)存空間給釋放出來(lái)。
這個(gè)操作就叫內(nèi)存管理。
我們?cè)趯懘a的時(shí)候,考慮內(nèi)存空管理是一件非常痛苦的事情。因?yàn)檫@個(gè)東西實(shí)在是太繁瑣了,一旦稍微處理不當(dāng),你的程序就有可能要崩潰,于是Python推出了一個(gè)內(nèi)存管理機(jī)制,稱之為垃圾回收機(jī)制。
那什么叫做垃圾呢,舉個(gè)例子;之前我們定義了一個(gè)name叫做于謙,我們通過(guò)這個(gè)變量名就可以找到它,也就是這個(gè)小房間里捆綁著一個(gè)門牌號(hào)(變量名),這個(gè)變量值是可以順著變量名引用到的,這個(gè)時(shí)候還不叫垃圾。一旦小房間里沒(méi)有捆綁著變量名,你是不是就找不到這個(gè)變量值了?,F(xiàn)在找不到值了,就成為了一個(gè)垃圾。
垃圾回收機(jī)制就是用來(lái)回收這種沒(méi)有關(guān)聯(lián)任何變量名的值,這就涉及到一個(gè)概念,叫做引用計(jì)數(shù),顧名思義就是統(tǒng)計(jì)引用的個(gè)數(shù)嘛。
就以于謙這個(gè)值為例,它的引用計(jì)數(shù),也就是這個(gè)內(nèi)存空間身上捆綁了幾個(gè)變量名,現(xiàn)在捆綁了一個(gè)name,還有a、b這三個(gè),那么它的引用計(jì)數(shù)就是3.
反之,如果name、a、b這三個(gè)都和于謙解除了捆綁關(guān)系,那么它的引用計(jì)數(shù)就位0,也就是垃圾。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » 零基礎(chǔ)Python 變量的內(nèi)存管理機(jī)制