Pythonのオブジェクト破壊とは何ですか? Pythonのオブジェクト破棄(ガベージコレクション)メカニズムとは何ですか?

乌拉乌拉~
リリース: 2018-08-20 14:38:40
オリジナル
1915 人が閲覧しました

この記事では、Python のオブジェクト破壊 (ガベージ コレクション) について見てみましょう。プログラミング言語 Python に触れたばかりの人にとって、Python のオブジェクト破壊 (ガベージ コレクション) についてはあまり知らないはずです。 Python ガベージ コレクション についてはあまり知りません。次回は、Python のオブジェクト破棄 (ガベージ コレクション) の知識と、python におけるガベージ コレクションの仕組みについて学びます。

Python オブジェクトの破棄 (ガベージ コレクション)

Python は、参照カウントと呼ばれる単純な手法を使用して、ガベージを追跡し、リサイクルします。

Python は内部的に、使用中の各オブジェクトが持つ参照の数を記録します。

参照カウンターと呼ばれる内部追跡変数。

オブジェクトが作成されると参照カウントが作成され、オブジェクトが不要になった場合、つまりオブジェクトの参照カウントが 0 になった場合、オブジェクトはガベージ コレクションされます。ただし、リサイクルは「即時」ではなく、インタプリタは適切なタイミングでガベージ オブジェクトによって占有されているメモリ空間をリサイクルします。

a = 40      # 创建对象  <40>
b = a       # 增加引用, <40> 的计数
c = [b]     # 增加引用.  <40> 的计数

del a       # 减少引用 <40> 的计数
b = 100     # 减少引用 <40> 的计数
c[0] = -1   # 减少引用 <40> 的计数
ログイン後にコピー

ガベージ コレクション メカニズムは、参照カウントが 0 のオブジェクトを対象とするだけでなく、循環参照も処理できます。循環参照は、2 つのオブジェクトが相互に参照しているが、他の変数がそれらを参照していない場合に発生します。

この場合、参照カウントだけでは十分ではありません。 Python のガベージ コレクターは、実際には参照カウンターと循環ガベージ コレクターです。参照カウントに加えて、ガベージ コレクターは、大量に割り当てられたオブジェクト (および参照カウントによって破棄されていないオブジェクト) も調べます。この場合、インタプリタは一時停止し、参照されていないループをクリーンアップしようとします。

インスタンス分析

オブジェクトが破棄されると、デストラクター __del__、__del__ が呼び出されます。オブジェクトが使用されなくなったら、__del__ メソッドが実行されます。

# !/usr/bin/python
# -*- coding: UTF-8 -*-
class Point:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
    def __del__(self):
        class_name = self.__class__.__name__
        print class_name, "销毁"
        
pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3)  # 打印对象的id
del pt1
del pt2
del pt3
ログイン後にコピー

上記の例の結果は次のとおりです:

3083401324 3083401324 3083401324Point 销毁
ログイン後にコピー

(注: 通常は別のファイルでクラスを定義する必要があります)

上記はすべてこの記事で説明されています。 , この記事ではpythonのオブジェクト破壊(ガベージコレクション)の知識を中心に紹介します。上記の内容と例を理解するためにこの情報を活用していただければ幸いです。この記事で説明したことがあなたのお役に立ち、Python の学習が容易になることを願っています。

関連知識の詳細については、php 中国語 Web サイトの Python チュートリアル 列を参照してください。

以上がPythonのオブジェクト破壊とは何ですか? Pythonのオブジェクト破棄(ガベージコレクション)メカニズムとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート