検索
ホームページバックエンド開発Python チュートリアルPython オブジェクトのメモリ使用量に関する簡単な説明

すべてはオブジェクトです

Python では、あらゆる種類の定数や変数、整数、ブール値、さらには関数も含めて、すべてがオブジェクトです。 stackoverflow の質問を参照してください。すべては Ruby のような Python のオブジェクトですか

コードで確認できます:

# Python のすべては object def fuction(): return print isinstance(True, object) print isinstance(0, object) print isinstance('a', object) print isinstance(fuction, object)

計算方法

Python は、Python オブジェクトのサイズを計算する関数 getsizeof を sys モジュールに提供します。

リーリー

もちろん、オブジェクトのメモリ使用量は Python のバージョンとオペレーティング システムのバージョンに密接に関係しています。この記事のコードとテスト結果は Windows7 32 ビット オペレーティング システムに基づいています。

import sys print sys.version

<font color="#000000" face="NSimsun">2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)]</font>

基本的なタイプ

•ブール値

print 'True のサイズ: %d' % (sys.getsizeof(True)) print 'False のサイズ: %d' % (sys.getsizeof(False))

出力:

真のサイズ: 12 偽のサイズ: 12

•形成外科

# 通常の整数 print '整数のサイズ: %d' % (sys.getsizeof(1)) # long print 'long 整数のサイズ: %d' % (sys.getsizeof(1L)) print '大きな長整数のサイズ: %d' % (sys.getsizeof(100000L)) 出力:

整数のサイズ: 12x 長整数のサイズ 1L: 14 長整数 100000L: 16

整数型は12バイト、長整数型は最低でも14バイトを占有しており、桁数が増えるほど占有領域が大きくなることがわかります。 バージョン 2.x では、整数型の値が sys.maxint を超えると、自動的に長整数に拡張されます。 Python 3.0 以降、整数と長整数は 1 つの型に統合されます。

•浮動小数点

print 'float のサイズ: %d' % (sys.getsizeof(1.0))

出力:

フロートのサイズ: 16

浮動小数点型は 16 バイトを占有します。一定の精度を超える場合は四捨五入されます。

次のコードを参照してください:

印刷 1.00000000003 印刷 1.000000000005

出力:

1.00000000003 1.00000000001

•文字列

# 文字列型のサイズ print 'rn'.join(["size of string with %d chars: %d" % (len(elem), sys.getsizeof(elem)) for elem in ["", "a" , "ab"]]) # Unicode 文字列のサイズ print 'rn'.join(["%d 文字の Unicode 文字列のサイズ: %d" % (len(elem), sys.getsizeof(elem)) for elem in [u""、u"a"、u"ab"]])

出力:

0 文字の文字列のサイズ: 21 1 文字の文字列のサイズ: 22 2 文字の文字列のサイズ: 23 0 文字の Unicode 文字列のサイズ: 26 1 文字の Unicode 文字列のサイズ: 28 2 文字の Unicode 文字列のサイズ: 30

通常の空の文字列は 21 バイトを占め、追加の文字はさらに 1 バイトを占めます。 Unicode 文字列は最小 26 バイトを占有し、追加の文字ごとにさらに 2 バイトを占有します。

コレクションタイプ

•リスト

# リスト型のサイズ print 'rn'.join(["要素 %d を含むリストのサイズ: %d" % (len(elem), sys.getsizeof(elem)) for elem in [[], [0] 、[0,2]、[0,1,2]]])

出力:

要素が0のリストのサイズ: 36 要素が1のリストのサイズ: 40 要素が2のリストのサイズ: 44 要素が3のリストのサイズ: 48

表示されるリストは少なくとも 36 バイトを占め、追加要素ごとに 4 バイトずつ増加します。ただし、sys.getsizeof 関数はコンテナー タイプの要素サイズを計算しないことに注意してください。例:

print '3 つの整数 %d を含むリストのサイズ' % (sys.getsizeof([0,1,2])) print '3 つの文字列 %d を含むリストのサイズ' % (sys.getsizeof(['0',' 1','2']))

出力:

3つの整数を含むリストのサイズ 48 3つの文字列を含むリストのサイズ 48

コンテナに保存されるものは要素への参照である必要があります。コンテナを正確に計算したい場合は、再帰的な sizeof レシピを参照できます。提供される total_size 関数を使用します:

print '3 つの整数からなるリストの合計サイズ %d' % (total_size([0,1,2])) print '3 つの文字列からなるリストの合計サイズ %d' % (total_size(['0','1' ,'2']))

出力は次のとおりです:

3つの整数を含むリストの合計サイズ 84 3つの文字列を含むリストの合計サイズ 114

リストが占めるスペースは、基本スペース 36 + (オブジェクト参照 4 + オブジェクト サイズ) * 要素数であることがわかります。

また、リスト変数を宣言すると、要素を追加する際の効率を高めるためにスペースが事前に割り当てられることにも注意してください。

li = [] for i in range(0, 101): print '%d 整数のリスト サイズ: %d, total_size: %d' % (i, getsizeof(li), total_size(li)) li.append(私)

•タプル

基本的にはリストと似ていますが、少なくとも 28 バイト必要です。

•辞書

もちろん、辞書の状況は比較的複雑です。詳細については、コード dictobject.c を参照してください。また、辞書の最適化に関する注意事項も注意深く読む価値があります。

基本的な状況については、[stackoverflow] の質問 Python の辞書の基礎となるハッシュ データ構造に関するいくつかの回答を参照できます。

•辞書の最小スペースは 8 エントリ (PyDict_MINSIZE) です。

•エントリー数が50,000件未満の場合、毎回4倍に増加します
•エントリー数が50,000を超える場合、毎回2倍に増加します;
•キーのハッシュ値は辞書にキャッシュされ、辞書のサイズが変更された後は再計算されません。

辞書は 2/3 に近づくたびにサイズが変更されます。

Python オブジェクトのメモリ使用量について簡単に説明した上記の記事は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonアレイをどのようにスライスしますか?Pythonアレイをどのようにスライスしますか?May 01, 2025 am 12:18 AM

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

どのような状況で、リストは配列よりもパフォーマンスが向上しますか?どのような状況で、リストは配列よりもパフォーマンスが向上しますか?May 01, 2025 am 12:06 AM

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

PythonアレイをPythonリストに変換するにはどうすればよいですか?PythonアレイをPythonリストに変換するにはどうすればよいですか?May 01, 2025 am 12:05 AM

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

Pythonにリストが存在する場合、配列を使用する目的は何ですか?Pythonにリストが存在する場合、配列を使用する目的は何ですか?May 01, 2025 am 12:04 AM

choosearraysoverlistsinperbetterperformance andmemoryeficiencyspecificscenarios.1)largeNumericaldatasets:Araysreducememoryusage.2)パフォーマンス - クリティカル操作:ArraysOfferSpeedBoostsfortsfortsclikeappendedoring.3)タイプリー:Arrayesenforc

リストの要素と配列を繰り返す方法を説明します。リストの要素と配列を繰り返す方法を説明します。May 01, 2025 am 12:01 AM

Pythonでは、ループに使用し、列挙し、包括的なリストを通過することができます。 Javaでは、従来のループを使用し、ループを強化してアレイを通過することができます。 1。Pythonリストトラバーサル方法は、ループ、列挙、およびリスト理解のためのものです。 2。Javaアレイトラバーサル法には、従来のループとループ用の強化が含まれます。

Python Switchステートメントとは何ですか?Python Switchステートメントとは何ですか?Apr 30, 2025 pm 02:08 PM

この記事では、バージョン3.10で導入されたPythonの新しい「マッチ」ステートメントについて説明します。これは、他の言語のスイッチステートメントに相当するものです。コードの読みやすさを向上させ、従来のif-elif-elよりもパフォーマンスの利点を提供します

Pythonの例外グループとは何ですか?Pythonの例外グループとは何ですか?Apr 30, 2025 pm 02:07 PM

Python 3.11の例外グループは、複数の例外を同時に処理することで、同時シナリオと複雑な操作でエラー管理を改善します。

Pythonの関数注釈とは何ですか?Pythonの関数注釈とは何ですか?Apr 30, 2025 pm 02:06 PM

Pythonの関数注釈は、タイプチェック、ドキュメント、およびIDEサポートの関数にメタデータを追加します。それらはコードの読みやすさ、メンテナンスを強化し、API開発、データサイエンス、ライブラリの作成において重要です。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 Mac版

SublimeText3 Mac版

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。