Python类内存使用

时间:2015-01-23 20:09:15

标签: python memory-management numpy

我试图了解如何实现python的类以及分配给它们将消耗多少内存。所以我创建了一个大的numpy数组,然后将它分配给一个类,然后将该类分配给另一个类(下面)。

import numpy as np

class Foo(object):
    def __init__(self, x=0):
        self.x = x

class Bar(object):
    def __init__(self, x=None):
        self.x = x

x = np.random.normal(0, 1, (50000, 10))
a = Foo(x)
b = Bar(a)

使用sys.getsizeof似乎无助于获取numpy数组的内存大小。 Numpy数组使用nbytes,但是引用numpy数组的类并不具有nbytes作为方法。

如果我对x进行了更改,则a.xb.x.x会自动更新以反映它。 Python documentation注释对象别名就像指针一样。我是否正确a.xb.x.x可以被认为更像是指向原x的指针?由于类似于指针,因此ab的内存占用量不应与x的基础大小相关。这是对的吗?

1 个答案:

答案 0 :(得分:3)

将这些对象分配给numpy将为您提供仅代表指针大小的对象引用,以便它们与对象的实际大小无关。

对于sys.getsizeof(),这将获得numpy对象描述的大小,但不是所有子对象的大小,因此对于这种情况,它肯定是不准确的。我的猜测是这种情况下的实际大小为sys.getsizeof(x) + x.nbytes

对于存储a的{​​{1}},是的,默认情况下,Python只复制引用,而不是实际值。

为了说明这种行为:

x

分析内存使用情况的一个很好的模块是pympler