ホームページ バックエンド開発 Python チュートリアル Python オブジェクトのメモリ使用量

Python オブジェクトのメモリ使用量

Feb 28, 2017 pm 04:48 PM

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

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モジュールに用意されています。

sys.getsizeof(object[, default])

以字节(byte)为单位返回对象大小。 这个对象可以是任何类型的对象。 所以内置对象都能返回正确的结果 但不保证对第三方扩展有效,因为和具体实现相关。

......

getsizeof() 调用对象的 __sizeof__ 方法, 如果对象由垃圾收集器管理, 则会加上额外的垃圾收集器开销。
ログイン後にコピー

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

import sys print sys.version

2.7.2 (デフォルト、2011年6月24日12:21:10) [MSC v.1500 32 bit (Intel)]

基本型

•Boolean

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

出力:

True のサイズ: 12 False のサイズ: 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))

出力:

floatのサイズ: 16

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

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

print 1.00000000003 print 1.000000000005

出力:

1.00000000003 1.00000000001

•String

# 文字列型のサイズ print 'rn'.join([" %d 文字の文字列のサイズ: %d" % (len(elem), sys.getsizeof(elem)) for elem in ["", "a", "ab"]]) # Unicode 文字列のサイズ print 'rn'.join(["size %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 バイトを占有します。

コレクション型

•List

# リスト型のサイズ 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 'list with %d integers size : %d, total_size: %d' % (i, getsizeof(li), total_size(li)) li.append(i)

•タプル

は基本的にリストに似ていますが、少なくとも28文字必要ですお祭り。

•辞書

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

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

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

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

上記の Python オブジェクトのメモリ使用量は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、PHP 中国語 Web サイトもサポートしていただければ幸いです。

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を入力してください...

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

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

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

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

中間の読書にどこでも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