ホームページ バックエンド開発 Python チュートリアル Python がメモリ管理を実行する方法

Python がメモリ管理を実行する方法

Jun 21, 2019 am 10:14 AM
Pythonのメモリ管理

Python がメモリ管理を実行する方法

Python では、メモリを管理するための参照カウントというメカニズムが導入されています。

Python は内部で参照カウントを使用して、メモリ内のオブジェクトを追跡します。Python は、オブジェクトが持つ参照の数、つまり参照カウントを内部的に記録します。オブジェクトが作成されると、参照カウントが作成されます。オブジェクトが不要になり、その参照カウントが 0 になると、そのオブジェクトはガベージ コレクションされます。

要約すると、次の状況では、オブジェクトの参照カウントが 1 増加します:

1. オブジェクトが作成されます: x=4

2. その他 その他が作成されます: y=x

3. パラメータとして関数に渡されます: foo(x)

4. コンテナ オブジェクトの要素として: a=[ 1,x,'33' ]

参照カウント削減の状況

1. ローカル参照はスコープを離れます。たとえば、上記の foo(x) 関数が終了すると、x が指すオブジェクト参照は 1 だけ減らされます。

2. オブジェクトのエイリアスは明示的に破棄されます: del x; または del y

3. オブジェクトのエイリアスが別のオブジェクトに割り当てられます: x=789

4. オブジェクトがウィンドウ オブジェクトから削除されます: myList.remove(x)

5. ウィンドウ オブジェクト自体が破棄されます: del myList、またはウィンドウ オブジェクト自体がスコープを離れます。

ガベージ コレクション

1. メモリに使用されなくなった部分がある場合、ガベージ コレクターはそれらをクリーンアップします。参照カウントが 0 のオブジェクトをチェックし、メモリ内のスペースをクリアします。もちろん、参照カウント 0 がクリアされることに加えて、ガベージ コレクターによってクリアされる別の状況もあります。つまり、2 つのオブジェクトが相互に参照するとき、それらの他の参照はすでに 0 になっています。

2. ガベージ コレクション メカニズムには、循環参照オブジェクトが確実に解放されるようにするための循環ガベージ コレクターもあります (a は b を参照し、b は a を参照するため、参照カウントが 0 になることはありません)。

Python では、多くの場合、適用されるメモリは小さなメモリ ブロックです。これらの小さなメモリ ブロックは、適用後すぐに解放されます。これらのメモリ アプリケーションはオブジェクトを作成するためのものではないため、オブジェクトはありません-レベルのメモリプールメカニズム。これは、Python が動作中に多数の malloc および free 操作を実行し、ユーザー モードとコア モードを頻繁に切り替えることを意味し、Python の実行効率に重大な影響を与えます。 Python の実行効率を高速化するために、Python ではアプリケーションと小さなメモリ ブロックの解放を管理するメモリ プール メカニズムが導入されています。

メモリ プール メカニズム

Python はメモリのガベージ コレクション メカニズムを提供しますが、未使用のメモリはオペレーティング システムに返すのではなく、メモリ プールに入れられます。

Python の 256 バイト未満のすべてのオブジェクトは pymalloc によって実装されたアロケーターを使用しますが、大きなオブジェクトはシステムの malloc を使用します。さらに、整数、浮動小数点数、リストなどの Python オブジェクトには独自の独立したプライベート メモリ プールがあり、そのメモリ プールはオブジェクト間で共有されません。これは、多数の整数を割り当てて解放すると、これらの整数のキャッシュに使用されるメモリを浮動小数点数に割り当てることができなくなることを意味します。

以上がPython がメモリ管理を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

See all articles