私はPythonに新しく、先ほどPython delメソッドを見つけたので、次のコードの出力に疑問があります。「対話モード」と「スクリプトモード」のPython __del__メソッドの出力
class Robot():
def __init__(self, name):
print(name + " has been created!")
def __del__(self):
print ("Robot has been destroyed")
if __name__ == "__main__":
x = Robot("Tik-Tok")
y = Robot("Jenkins")
z = x
z
x
del x
del z
del y
ケース1:
ので、スニペットコードは次のようなものになり、私は「スクリプトモード」でコードを実行した場合、次の出力が得られます。
Tik- Tokが作成されました! ジェンキンスが作成されました!ことは、なぜ私の質問をされて
>>> x = Robot("Tik-Tok")
Tik-Tok has been created!
>>> y = Robot("Jenkins")
Jenkins has been created!
>>> z = x
>>> z
<__main__.Robot object at 0x02D7E910>
>>> x
<__main__.Robot object at 0x02D7E910>
>>> del x
>>> del z
>>> del y
Robot has been destroyed
:私は「対話モード」でコードを実行した場合、次の出力が得られます: ロボットが ロボットが
ケース2を破壊された破壊されています「ロボットが破壊されました」はケース2(対話モード)で1回だけ印刷され、ケース1(スクリプトモード)では2回印刷されます。 私はガベージコレクションに関するいくつかの調査を行いました。私の理解に基づいて、del x
とdel z
のステートメントの後で、Robotオブジェクトのrefcountは0になり、その後__del__
メソッドも同様にトリガーされますか? (del y
ステートメントの2番目の__del__
メソッドがトリガされる直前)
Do.Not.Implement。 '__del__'です。ほとんど*確かに*有用ではなく、メモリーリークを引き起こす可能性が非常に高いです。 –
また、あなたのインデントは何ですか? – patrick