【发布时间】:2019-07-07 04:44:14
【问题描述】:
我有一个需要用 0-3 个字符串“标记”的对象(在一组 20 种可能性中);这些值都是唯一的,顺序无关紧要。唯一需要对标签执行的操作是检查特定标签是否存在 (specific_value in self.tags)。
但是,内存中同时存在大量这些对象,以至于它突破了我旧计算机 RAM 的限制。所以节省几个字节可以加起来。
每个对象上的标签都很少,我怀疑查找时间是否会很重要。但是:在这里使用元组和冻结集之间是否存在内存差异?还有其他真正的理由使用其中一个吗?
【问题讨论】:
-
不要忽视购买更多 RAM 的选项。
-
您可以通过反转事物来节省一些开销-拥有从对象(身份)映射到该类型的标签(如果存在)的 3x 全局字典(tag1Map、tag2Map、tag3Map)。如果标签是稀疏的,这将很有帮助......(您可以节省为每个对象创建集合所带来的开销)
-
@eddiewould 很好的建议!但我不清楚:每个对象最多只有三个标签,但有大约二十个可能的标签可供选择。我将编辑问题。
-
@user2357112 从长远来看,这可能是一个更好的解决方案……
-
@Draconis 我认为我的建议仍然有效。但是,如果您仅限于一组约 20 个可能的标签,您可以考虑某种位图(标志)方法,即不存储字符串,只需将给定标志的存在/不存在存储为“位”之一在 32 位整数上。然后,您将在其他地方进行(一次)从标志值到实际字符串的映射。
标签: python memory-management tuples frozenset