3

Pythonでのクラス属性の有効期間は? クラスのインスタンスが現在ライブでない場合、クラスとそのクラス属性がガベージ コレクションされ、クラスが次に使用されるときに新しく作成される可能性がありますか?

たとえば、次のようなものを検討してください。

class C(object):
    l = []

    def append(self, x):
        l.append(x)

のインスタンスを作成し、 にC5 を追加するC.lと、 のインスタンスはC参照されなくなり、ガベージ コレクトできるようになります。後で、 の別のインスタンスを作成しC、 の値を読み取りますC.l。私C.lは保持することが保証されてい[5]ますか?または、クラス自体とそのクラス属性がガベージ コレクションされ、C.l = []後でもう一度実行される可能性はありますか?

または、別の言い方をすれば、クラス属性の存続期間は「永遠」ですか? クラス属性の有効期間はグローバル変数と同じですか?

4

2 に答える 2

2

クラスのインスタンスが現在ライブでない場合、クラスとそのクラス属性がガベージ コレクションされ、クラスが次に使用されるときに新しく作成される可能性がありますか?

いいえ。ガベージ コレクションされたクラスの「次の使用」はありません。ガベージ コレクションを実行できる唯一の方法は、使用する方法が残っていない場合です。

のインスタンスを作成し、 にC5 を追加するC.lと、 のインスタンスはC参照されなくなり、ガベージ コレクトできるようになります。後で、 の別のインスタンスを作成しC、 の値を読み取りますC.l。私C.lは保持することが保証されてい[5]ますか?

はい。別のインスタンスを作成したため、クラスにはライブ参照があり、リストにはクラスの属性としてライブ参照があります。

クラス属性の有効期間はグローバル変数と同じですか?

クラスが何かへの参照を保持している場合、その何かは少なくともクラスと同じくらい存続します。

于 2016-12-06T19:38:39.357 に答える