class Dog:
def __init__(self, ap1)
self.name = ap1
self.tricks = []
def.addTrick(self, ap1)
self.tricks.append(ap1)
上記のように、私は犬のインスタンスを生成するクラスを持っています。保存されている変数を使わずにクラスインスタンスを参照することはできますか?
curDog=Dog("Seymour")
curDog.addTrick("Wait Forever")
print("curDog is " + curDog.name)
print(curDog.name + " knows " + str(curDog.tricks))
print("")
curDog=Dog("Brian")
curDog.addTrick("Psuedo Intellectual Debate")
print("curDog is " + curDog.name)
print(curDog.name + " knows " + str(curDog.tricks))
print("")
そしてここで上記の私はシリアルに、同じ変数curDog
(現在の犬)を占め、2つのインスタンス、Dog('Seymour')
とDog('Brian')
を持っています。出力は次のようになります。
>>> main()
curDog is Seymour
Seymour knows ['Wait Forever']
curDog is Brian
Brian knows ['Pseudo Intellectual Debate']
>>>
curDogを使用してブライアンを保存すると、もはやシーモアは参照されなくなることは明らかです。しかし、この時点で私はシーモアに何が起こったのだろうかと思います。彼はまだ環境のエーテルの中にいて、単に可変リンクから切り離されていますか?または彼は完全にBrianのための部屋を作るために絶滅したのですか?
前者の場合、どうすれば彼と彼のトリックリストにアクセスできますか?
投稿の原点以上に、curDog
を使わずにブライアンを参照することは可能ですか?私はprint("Brian".tricks)
とprint(Dog('Brian').tricks)
のようなものを試しましたが、うまくいかなかったときにはそれほど驚きませんでした。
これを行う方法はありますか?自分自身でこれに答えるのに役立つクラスインスタンスを理解するためのより良い方法がありますか?
オブジェクトへの参照が残っていなければ、ガベージコレクションのために解放されます - 将来、ある特定の時点で、それは他のものでメモリに上書きされます。複数のインスタンスへのアクセスを維持する必要がある場合は、それらを辞書またはリストに入れます。 – jonrsharpe
あなたが探しているフレーズは "ガベージコレクション"です。それについて多くのことが書かれています。例:http://arctrix.com/nas/python/gc/ –