getsizeof 的价值有限。对于列表来说,这可能是一种方式。对于数组更好,但你必须了解数组是如何存储的。
In [447]: import sys
In [448]: a = np.arange(100)
In [449]: sys.getsizeof(a)
Out[449]: 896
但是看看view的size:
In [450]: b = a.reshape(10,10)
In [451]: sys.getsizeof(b)
Out[451]: 112
这显示了数组对象的大小,而不是共享数据缓冲区的大小。 b 没有自己的数据缓冲区。
In [453]: a.size
Out[453]: 100
In [454]: b.size
Out[454]: 100
所以我猜你的a 和b 是其他一些数组的视图。但是连接会产生一个带有自己的数据缓冲区的新数组。不可能是其他两个的看法。所以它的getsizeof 反映了这一点。
In [457]: c = np.concatenate((a,b.ravel()))
In [459]: c.shape
Out[459]: (200,)
In [460]: c.size
Out[460]: 200
In [461]: sys.getsizeof(c)
Out[461]: 1696
a 的数据缓冲区为 100*8 字节,因此“开销”为 96。对于 c,为 200*8,同样具有 96 个“开销”。