将z3符号表达式存储到字典键中的有效方法
我正在使用将z3符号表达式存储到字典键中的有效方法,z3,z3py,Z3,Z3py,我正在使用Z3Py开发一些工具,在我的代码中,我维护了多个词典来跟踪一些信息 请注意,有时我需要使用z3表达式作为某些字典的键,并且由于z3表达式是不可散列的(对吗?),我现在正在做的是: 使用Python str函数将z3表达式转换为字符串 将字符串表示形式存储为字典的键 然而,一些分析和观察表明,从z3表达式到string的转换需要相当长的时间,这已经成为我代码的瓶颈 所以我的问题是,在字典中使用z3表达式作为键最有效的方法是什么?或者是否有解决方案 表达式应该是可散列的。表达式覆盖哈希和e
Z3Py
开发一些工具,在我的代码中,我维护了多个词典
来跟踪一些信息
请注意,有时我需要使用z3
表达式作为某些字典的键,并且由于z3
表达式是不可散列的(对吗?),我现在正在做的是:
Python str
函数将z3
表达式转换为字符串字符串
表示形式存储为字典的键z3
表达式到string
的转换需要相当长的时间,这已经成为我代码的瓶颈
所以我的问题是,在字典中使用
z3
表达式作为键最有效的方法是什么?或者是否有解决方案 表达式应该是可散列的。表达式覆盖哈希和eq方法。
例如,visitor使用字典
作为旁注,我怀疑这在常见情况下是否相关:您可以依赖的另一个属性是表达式具有唯一的整数标识符。方法“get_id()”返回标识符。这提供了另一种索引表达式的方法。表达式的标识符是从0开始的数字。最大标识符永远不会超过创建的表达式数。如果表达式被垃圾收集,那么标识符将被回收。因此,如果您使用此功能,当然要确保将表达式固定在堆中。我实际上是为了我的目的扩展了
visitor
示例!让我看看问题出在哪里。好吧,我最终发现这是因为我的z3Py
过时了。通过使用github上的最新版本进行更新,它变得可散列。