我正在使用Z3Py
开发一些工具,在我的代码中,我维护了多个dictionaries
来跟踪某些信息。
请注意,有时我需要使用z3
表达式作为某个字典的键,并且由于z3
表达式不可清除(我是对的吗?),我现在正在做的是:
z3
函数将Python str
表达式转换为字符串。string
表示存储为字典的键。然而,一些分析和观察显示从z3
表达式到string
的翻译需要花费很多时间,并且它已成为我的代码的瓶颈。
所以这是我的问题,使用z3
表达式作为字典中的键的最有效方法是什么?或者有解决方案吗?
答案 0 :(得分:2)
表达式应该是可以清除的。表达式覆盖哈希和 eq 方法。 访问者示例https://github.com/Z3Prover/z3/blob/master/examples/python/visitor.py使用字典。
作为旁注,我怀疑这在常见情况下是相关的:您可以依赖的另一个属性是表达式具有唯一的整数标识符。方法" get_id()"返回标识符。这提供了另一种索引表达式的方法。表达式的标识符是从0开始的数字。最大标识符永远不会超过创建的表达式的数量。如果表达式是垃圾回收,则标识符将被回收。因此,如果使用此功能,当然要确保在堆中固定表达式。