Python中内存高效的对象表

Python中内存高效的对象表,python,Python,我有一个大表/矩阵(表示为列表列表)。表的每个元素都是一个包含数据的类对象。有些元素是重复的,我想确保我的表需要尽可能少的内存。我知道Python中没有指针,但是类对象可以绑定到它。我使用以下语法(作为示例): 那么,我的问题是:这个语法是否确保复制对象只完整地写入内存一次,如果没有,我应该更改什么 另外,我使用Python3,如果你只想将同一个对象复制到矩形块中,那么你的方法应该可以工作。否则,最好向函数传递一个元组数组,在该数组上迭代,并为每个点分配类,而不是只依赖于在x*y矩形中这样做 如

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

那么,我的问题是:这个语法是否确保复制对象只完整地写入内存一次,如果没有,我应该更改什么


另外,我使用Python3,如果你只想将同一个对象复制到矩形块中,那么你的方法应该可以工作。否则,最好向函数传递一个元组数组,在该数组上迭代,并为每个点分配类,而不是只依赖于在x*y矩形中这样做


如果你真的担心内存效率,我也会调查一下。它具有“类似C”的内存连续数组,这将使数组更小,并在遍历数组时提供空间局部性的好处。

这样,my_data中的同一对象将被引用(x2-x1)*(y2-y1)次,但是,如果您再次调用
fill_fields
函数,使用
vaue1
value2
的相同值,那么您的字段中将有多个
MyDataClass
(使用相同的“值”)实例。

是的,您的列表将包含相同的对象x*y次。但你为什么要重复同一个物体这么多次呢。。。事实上,他有一个指针。。。你就是看不见他们。如果您执行
a=MyDataClass();b=a
a和b指向完全相同的实例。如果您执行
打印(id(a)、id(b))
,则可以看到它。如果您需要复制对象,则需要使用
复制
模块的服务。谢谢。现在我只使用矩形(更精确地说是1*y)。但如果我需要更复杂的东西,我也可以适当地修改函数,不是吗?换句话说,就是罗马数组?这样,您可以跳过所有有趣的测试用例;-)
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)