1

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

使用 Python 的内存使用量/CPU 时间/代码复杂性权衡是list什么dict

在 (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.."
4

1 回答 1

4

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

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

您可以在 PyCon 演示文稿“Core Python Containers: under-the-hood”(PPT)中阅读更多关于这些数据结构的信息(也可作为视频获得)

于 2013-09-03T12:36:04.787 回答