python中的變量與垃圾回收

python中的變量和java中的變量本質(zhì)是不一樣的协屡,python中的變量實(shí)質(zhì)上是一個(gè)指針(指針的大小固定的)

a = 1
a = "abc"
#1.a貼在1上面
#2.先生成對(duì)象感憾,然后便利貼

a= [1, 2, 3]
b=a
print(id(a), id(b))  #a和b是同一個(gè)對(duì)象
print (a is b)

 #結(jié)果
140519998094152 140519998094152
True

is 和 ==的區(qū)別

is可以用來判斷id是否相等

a = [1, 2, 3, 4]
b = [1 ,2, 3, 4]

140519998162248 140519998864264
False

對(duì)于這種賦值弛槐,雖然所賦值是相同的搪泳,但是他們的id不同楚殿,即他們是不同的對(duì)象哮兰,a is b 即為false ,但是有個(gè)特例: a = 1 b = 1 時(shí)他們的id相同贺纲。其實(shí)這是python內(nèi)部的優(yōu)化機(jī)制航闺,對(duì)于小整數(shù)和小的字符串來說,python在前邊定義一個(gè)對(duì)象時(shí)猴誊,下次在遇到時(shí)會(huì)直接調(diào)用前邊生成的對(duì)象潦刃,而不會(huì)去重新申請(qǐng)一個(gè)。

a = [1, 2, 3, 4]
b = [1 ,2, 3, 4]
print(id(a), id(b))
print(a == b)

140519999248264 140519999070600
True

他們的對(duì)象內(nèi)存地址不一樣懈叹,但是乖杠,a和b里的值是相等的,這是由于a和b都為list,而list里有內(nèi)置的魔法函數(shù)eq通過eq魔法函數(shù)可以判斷里邊兩個(gè)的值是否相同澄成,若相同則返回True

class  People:
      pass
person = People()
if type(person)  is People:  #在判斷persion是一個(gè)什么類時(shí)就可以使用is  切記不可使用==胧洒, 或者使用isinstance()
    print("yes")

del語句和垃圾回收

python中垃圾回收的算法回收的算法是采用引用計(jì)數(shù),當(dāng)程序中有一個(gè)變量引用該python對(duì)象時(shí)环揽,python會(huì)自動(dòng)保證該對(duì)象引用計(jì)數(shù)為1略荡;當(dāng)程序中有兩個(gè)變量引用該python對(duì)象時(shí)庵佣,python會(huì)自動(dòng)保證該對(duì)象計(jì)數(shù)器為2歉胶, 以此類推,當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)器變?yōu)? 時(shí)巴粪,則說明程序中不再有變量對(duì)其進(jìn)行引用通今,因此python就會(huì)回收該對(duì)象。

大多數(shù)情況肛根,python的ARC都能準(zhǔn)確辫塌,高效的回收系統(tǒng)中的每一個(gè)對(duì)象。但如果系統(tǒng)中出現(xiàn)循環(huán)引用時(shí)派哲,比如a對(duì)象持有一個(gè)實(shí)例變量引用對(duì)象b臼氨,而b對(duì)象又持有一個(gè)實(shí)例變量引用對(duì)象a,此時(shí) 兩個(gè)對(duì)象的計(jì)數(shù)器都為1芭届, 而實(shí)際上python不再需要這兩個(gè)對(duì)象储矩,也沒有程序在引用他們,系統(tǒng)回收他們時(shí)python的垃圾回收器就沒有那兒快褂乍,要等到專門的循環(huán)垃圾回收器(Cyclic Garbage Collector)來檢測(cè)并回收這種引用循環(huán)

當(dāng)一個(gè)對(duì)象被垃圾回收式持隧,python就會(huì)自動(dòng)調(diào)用該對(duì)象的del方法

對(duì)一個(gè)對(duì)象執(zhí)行del操作,該變量不一定會(huì)回收逃片,只有當(dāng)對(duì)象的引用計(jì)數(shù)器變?yōu)?時(shí)屡拨,該對(duì)象才會(huì)被回收。因此,如果一個(gè)對(duì)象有多個(gè)變量引用它呀狼,那么del其中一個(gè)變量是不會(huì)回收該對(duì)象的裂允。

class Item:
def __init__(self, name, price):
    self.name = name
    self.price = price 
#定義析構(gòu)函數(shù)
def __del__(self):
    print('del刪除對(duì)象')
#創(chuàng)建一個(gè)Item對(duì)象,將其賦給im變量
im = Item('鼠標(biāo)', 29.8)
x = im
#打印im所引用的對(duì)象
del im
print("---------------")

結(jié)果為
---------------
del刪除對(duì)象

若注釋掉  x = im  結(jié)果則改變?yōu)槿缦?
del刪除對(duì)象
---------------

當(dāng)沒有注釋掉x = im時(shí)哥艇, item對(duì)象被兩個(gè)變量所引用叫胖,所以在執(zhí)行完del im時(shí)并不會(huì)去回收item對(duì)象,所以先輸出--------她奥,當(dāng)程序完全執(zhí)行完成后瓮增,引用item的對(duì)象的變量被釋放,然后系統(tǒng)便會(huì)執(zhí)行del方法哩俭,回收item對(duì)象绷跑。

當(dāng) x = im被注釋后,只有一個(gè)變量去引用item對(duì)象凡资,所以在執(zhí)行完后程序變回去調(diào)用del方法砸捏,回收item對(duì)象,然后在繼續(xù)向下執(zhí)行 輸出-----

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隙赁,一起剝皮案震驚了整個(gè)濱河市垦藏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伞访,老刑警劉巖掂骏,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異厚掷,居然都是意外死亡弟灼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門冒黑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來田绑,“玉大人,你說我怎么就攤上這事抡爹⊙谇” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵冬竟,是天一觀的道長(zhǎng)欧穴。 經(jīng)常有香客問我,道長(zhǎng)诱咏,這世上最難降的妖魔是什么苔可? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮袋狞,結(jié)果婚禮上焚辅,老公的妹妹穿的比我還像新娘映屋。我一直安慰自己,他們只是感情好同蜻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布棚点。 她就那樣靜靜地躺著,像睡著了一般湾蔓。 火紅的嫁衣襯著肌膚如雪瘫析。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天默责,我揣著相機(jī)與錄音贬循,去河邊找鬼。 笑死桃序,一個(gè)胖子當(dāng)著我的面吹牛杖虾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播媒熊,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼奇适,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了芦鳍?” 一聲冷哼從身側(cè)響起嚷往,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柠衅,沒想到半個(gè)月后皮仁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茄茁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年魂贬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巩割。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裙顽。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宣谈,靈堂內(nèi)的尸體忽然破棺而出愈犹,到底是詐尸還是另有隱情,我是刑警寧澤闻丑,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布漩怎,位于F島的核電站,受9級(jí)特大地震影響嗦嗡,放射性物質(zhì)發(fā)生泄漏勋锤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一侥祭、第九天 我趴在偏房一處隱蔽的房頂上張望叁执。 院中可真熱鬧茄厘,春花似錦、人聲如沸谈宛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吆录。三九已至窑滞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恢筝,已是汗流浹背哀卫。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撬槽,地道東北人聊训。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恢氯,于是被迫代替她去往敵國和親带斑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361