1. ホーム
  2. python

[解決済み] Python構造体のインメモリサイズ

2022-06-22 02:26:39

質問

32ビットと64ビットのプラットフォームにおけるPythonのデータ構造のメモリサイズのリファレンスはありますか?

なければ、これはSOで持っているのがいいでしょう。より網羅的であればあるほどよいです! では、次の Python 構造体によって何バイトが使用されるのでしょうか (これは len とコンテンツタイプに依存します)?

  • int
  • float
  • 参考
  • str
  • ユニコード文字列
  • tuple
  • list
  • dict
  • set
  • array.array
  • numpy.array
  • deque
  • 新スタイルのクラスオブジェクト
  • 旧式クラスオブジェクト
  • ... そして、私が忘れているすべて!

(他のオブジェクトへの参照のみを保持するコンテナについては、共有されている可能性があるため、アイテム自体のサイズをカウントしたくないことは明らかです)。

さらに、実行時にオブジェクトによって使用されるメモリを取得する方法はありますか (再帰的かどうかにかかわらず)?

どのように解決するのですか?

推奨される 以前の質問 を使用することでした。 sys.getsizeof() と引用しています。

>>> import sys
>>> x = 2
>>> sys.getsizeof(x)
14
>>> sys.getsizeof(sys.getsizeof)
32
>>> sys.getsizeof('this')
38
>>> sys.getsizeof('this also')
48

こんなアプローチもあります。

>>> import sys
>>> import decimal
>>> 
>>> d = {
...     "int": 0,
...     "float": 0.0,
...     "dict": dict(),
...     "set": set(),
...     "tuple": tuple(),
...     "list": list(),
...     "str": "a",
...     "unicode": u"a",
...     "decimal": decimal.Decimal(0),
...     "object": object(),
... }
>>> for k, v in sorted(d.iteritems()):
...     print k, sys.getsizeof(v)
...
decimal 40
dict 140
float 16
int 12
list 36
object 8
set 116
str 25
tuple 28
unicode 28


2012-09-30

python 2.7 (linux, 32-bit):

decimal 36
dict 136
float 16
int 12
list 32
object 8
set 112
str 22
tuple 24
unicode 32

python 3.3 (linux, 32-bit)

decimal 52
dict 144
float 16
int 14
list 32
object 8
set 112
str 26
tuple 24
unicode 26


2016-08-01

OSX, Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin

decimal 80
dict 280
float 24
int 24
list 72
object 16
set 232
str 38
tuple 56
unicode 52