我有一个大表/矩阵(表示为列表列表)。表的每个元素都是带有数据的类对象。有些元素是重复的,我想确保我的表需要尽可能少的内存。我知道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
答案 0 :(得分:1)
如果您只想将同一个对象复制到矩形块中,那么您的方法应该可行。否则,最好将一个元组数组传递给函数,迭代该数组,并为每个点分配类,而不是仅仅依赖于能够在x * y矩形中这样做。
如果你真的担心内存效率,我也会调查numpy.ndarray。它具有“类C”存储器连续数组,它应该使数组变小,并在迭代它们时为您提供空间局部性的好处。
答案 1 :(得分:1)
这样,my_data
中的同一个对象被称为(x2-x1)*(y2-y1)次,但是如果你再次使用fill_fields
函数调用vaue1
函数{ {1}}和value2
,您的字段中会有多个MyDataClass
(具有相同的“值”)实例。