del涉及到python中的內(nèi)存管理機(jī)制,從c/c++轉(zhuǎn)過來的同學(xué)可能會(huì)踩一些語法坑,下面上一些代碼及運(yùn)行結(jié)果,談?wù)劷裉煲v的問題,后面再解釋具體原理機(jī)制。
a = 1
b = a
c = a
print(a)
print(b)
print(c)
- 結(jié)果
1
1
1
這個(gè)結(jié)果是很顯然的,不多解釋。
下面,del a和b, 打印c看一看:
a=1 # 對(duì)象 1 被 變量a引用,對(duì)象1的引用計(jì)數(shù)器為1
b=a # 對(duì)象1 被變量b引用,對(duì)象1的引用計(jì)數(shù)器加1 = 2
c=a #1對(duì)象1 被變量c引用,對(duì)象1的引用計(jì)數(shù)器加1 = 3
del a #刪除變量a,解除a對(duì)1的引用
del b #刪除變量b,解除b對(duì)1的引用
print(c) #最終變量c仍然引用1
結(jié)果:
1
很奇怪,明明a已經(jīng)被del了,c=a還是可以得到1的結(jié)果。
- 這就是python的GC也就是垃圾回收機(jī)制:
由于python都是引用,而python有GC機(jī)制,所以,del語句作用在變量上,而不是數(shù)據(jù)對(duì)象上。 - 將a和b del之后,1的引用計(jì)數(shù)仍然為1,所以不會(huì)被清除。