内存高效的Python对象表

时间:2014-12-10 08:58:39

标签: python

我有一个大表/矩阵(表示为列表列表)。表的每个元素都是带有数据的类对象。有些元素是重复的,我想确保我的表需要尽可能少的内存。我知道Python中没有指针,但是类对象可以绑定到。我使用以下语法(例如):

x = y = 1000

my_table = [[None] * y for i in range(x)]

class MyDataClass:
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2

def fill_fields(x1, x2, y1, y2, value1, value2):
    my_data = MyDataClass(value1, value2)
    for x in range(x1, x2):
        for y in range(y1, y2):
            my_table[x][y] = my_data

fill_fields(0, x, 0, y, 1, 2)

所以,我的问题是:这个语法是否确保重复对象只被整体写入内存一次,如果没有,我应该更改什么?

P.S。我使用Python3

2 个答案:

答案 0 :(得分:1)

如果您只想将同一个对象复制到矩形块中,那么您的方法应该可行。否则,最好将一个元组数组传递给函数,迭代该数组,并为每个点分配类,而不是仅仅依赖于能够在x * y矩形中这样做。

如果你真的担心内存效率,我也会调查numpy.ndarray。它具有“类C”存储器连续数组,它应该使数组变小,并在迭代它们时为您提供空间局部性的好处。

答案 1 :(得分:1)

这样,my_data中的同一个对象被称为(x2-x1)*(y2-y1)次,但是如果你再次使用fill_fields函数调用vaue1函数{ {1}}和value2,您的字段中会有多个MyDataClass(具有相同的“值”)实例。