Python 在内存中存储bytearray字符串

Python 在内存中存储bytearray字符串,python,bytearray,Python,Bytearray,我们有大量长度可变的Python bytearray字符串需要保留在内存中。Wrt raw performance,Python字典是对bytearray字符串进行只读随机访问的最有效内存存储吗?字典键可以是整数或字符串。如果没有,什么更好?这完全取决于您打算如何访问它们。如果您只想遍历它们,请将它们放入列表中。如果要按键搜索,请使用dict。无论您使用什么,您已经为所有的字节数组支付了空间,列表、dict或其他内容之间的差异可能很小。列表将使用500000个引用,每个引用4字节=2MB,Adi

我们有大量长度可变的Python bytearray字符串需要保留在内存中。Wrt raw performance,Python字典是对bytearray字符串进行只读随机访问的最有效内存存储吗?字典键可以是整数或字符串。如果没有,什么更好?

这完全取决于您打算如何访问它们。如果您只想遍历它们,请将它们放入
列表中。如果要按键搜索,请使用
dict
。无论您使用什么,您已经为所有的
字节数组
支付了空间,列表
dict
或其他内容之间的差异可能很小。列表将使用500000个引用,每个引用4字节=2MB,A
dict
可能是它的几倍。

用于哪种访问?顺序?使用适合您需要的访问类型的数据结构(例如,将无序键映射到值的DICT)。除非你描述你需要什么操作,否则要求“最高效”是没有意义的。我不怀疑你会从内存中的dict获得更快的原始速度,因为它就在这个过程中。Redis的优点/开销是让您可以通过复制和锁定作为服务(通过套接字)进行共享访问。这就像把一根锋利的棍子比作瑞士军队knife@jdi问题修改为随机访问。我认为基思的答案仍然正确。如果您只是在寻找纯粹的访问速度,那么python内置的数据结构将是最快的。除了原始速度,您还需要从这个数据结构中获得什么?没有什么?然后按照基思的答案回答。问题修改为说访问是随机的。随机的是什么?如果您的
bytearray
s从1到N编号,并按编号访问,则使用
列表
。如果它们有字符串名(或其他不透明标记),请使用
dict
。或者是别的什么?看看@KeithRandall刚才说的:dict key:value access是摊销的O(1),这意味着对于非常大的集合来说,单个密钥访问实际上不是O(1),而是许多访问操作的平均值。如果您可以使用索引访问列表中的bytearray(无需任何额外的查找来确定正确的索引位置),那么这将比dict快,绝对比Redis快。为了进一步添加到@Nisan.H,基本上您需要描述您的实际数据结构需求,以获得具体的答案。否则,这些只是选项。感谢您的输入。dict通常是我的首选,但在这种情况下,我想使用bytearray字符串进行双重检查,因为速度很重要。