私は本の中から以下のようなコードについて読んでいますが、説明されていませんでした。 ご覧のとおり、関数を呼び出す前に変数は存在しません。 しかし、関数呼び出しの後、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'は参照されています - ' func_a'は参照しています。 –