具有大型2D阵列的Python dict v.list的内存,CPU,复杂性权衡

时间:2013-09-03 12:06:54

标签: python

假设我有一个大约1280乘800的二维数组,我希望能够在某些数组插槽中存储大约4KiB的数据。 (也许几百?)

使用Python listdict的内存使用量/ CPU时间/代码复杂度权衡是什么?

在(123,456)处存储“blob ..”的快速示例。

coord = (123, 456)
L = []
L[to_index(coord)] = "blob.."
# to_index() probably returns (456*1280) + 123

coord = (123, 456)
D = {}
L[coord] = "blob.."

1 个答案:

答案 0 :(得分:4)

列表对于存储这些数据不会特别有效,因为它没有任何优势,因为它很稀疏。基本上你必须创建一个1024000个元素的列表,最初设置为None。在内部,它是一个向量或1024000个指针,在64位系统上每个8字节。创建此列表后,访问和设置特定单元格将是 O (1)操作。

OTOH,字典被实现为哈希表。因此,您只需要插入元素的空间。如果您正在处理稀疏数据,那么它是更好的选择。插入的摊销成本为 O (1),访问权限显然也是 O (1)。

您可以在PyCon演示文稿中"Core Python Containers: under-the-hood" (PPT)了解有关这些数据结构的更多信息(也可以video提供)