将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上的最新版本进行更新,它变得可散列。