python - Python 结构的内存大小

标签 python memory memory-footprint

在 32 位和 64 位平台上 Python 数据结构的内存大小有引用吗?

如果没有,那么将它放在 SO 上会很好。越详尽越好!那么以下 Python 结构使用了多少字节(取决于 len 和相关的内容类型)?

  • int
  • float
  • 引用
  • str
  • unicode 字符串
  • 元组
  • 列表
  • 字典
  • 设置
  • array.array
  • numpy.array
  • deque
  • 新型类对象
  • 老式类对象
  • ...以及我忘记的一切!

(对于只保留对其他对象的引用的容器,我们显然不想计算项目本身的大小,因为它可能是共享的。)

此外,有没有办法在运行时(递归或不递归)获取对象使用的内存?

最佳答案

来自an earlier question 的推荐在此使用 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 位):

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 位)

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(默认,2015 年 10 月 23 日,19:19:21)[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] 在 darwin 上

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

关于python - Python 结构的内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331471/

相关文章:

iphone - 应用程序因内存使用率非常低而崩溃 iphone/iPad

java - 如何确定 Java 应用程序中 PermGen 的大小(即以编程方式)?

python - Python 是否有像 Ruby 中的 ||= 这样的 "or equals"函数?

iOS 并不总是调用 didReceiveMemoryWarning

python - 模拟 - 测试是否在不指定参数的情况下调用方法

c++ - 类成员中 T[n] 与 T* 样式数组的含义

java - JVM 的内存占用量是多少,如何将其最小化?

c - unsigned char 在 C 嵌入式系统中的用处

python - Flask-从request.get_json()获取键值

python - scipy——如何将一个数组随机放入另一个数组中?