假设我有一个大约1280乘800的二维数组,我希望能够在某些数组插槽中存储大约4KiB的数据。 (也许几百?)
使用Python list
或dict
的内存使用量/ 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.."
答案 0 :(得分:4)
列表对于存储这些数据不会特别有效,因为它没有任何优势,因为它很稀疏。基本上你必须创建一个1024000个元素的列表,最初设置为None
。在内部,它是一个向量或1024000个指针,在64位系统上每个8字节。创建此列表后,访问和设置特定单元格将是 O (1)操作。
OTOH,字典被实现为哈希表。因此,您只需要插入元素的空间。如果您正在处理稀疏数据,那么它是更好的选择。插入的摊销成本为 O (1),访问权限显然也是 O (1)。
您可以在PyCon演示文稿中"Core Python Containers: under-the-hood" (PPT)了解有关这些数据结构的更多信息(也可以video提供)