我從一本關於如下代碼的書中讀到,但沒有解釋它。如您所見,在我調用函數之前,不存在變量。 但是在函數調用之後,var2被彈出窗體堆棧並從func_a的命名空間中移除,就像我們所期望的那樣。但是,var1仍然存在!爲什麼變量在函數調用完成後仍然存在-python
如何解釋這種現象? var1是一種特殊的變量嗎?
def func_a():
func_a.var1 = 1
var2 = 2
>>> func_a.var1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'var1'
>>> var2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'var2' is not defined
>>> func_a()
>>> func_a.var1
1
>>> var2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'var2' is not defined
我覺得,這更像是一堂課。一個物體在沒有被他人引用時被收集爲物品,是嗎? –
是的,一個對象在未被引用時被垃圾收集。 'var1' _is_被引用 - 'func_a'有一個引用。 –