Hash Python哈希对于Symphy对象是不确定的
我将符号表达式提供给函数,并希望在输入参数集之前已经处理过时返回以前计算的结果。为此,我考虑对传递给函数的参数进行散列,但这不起作用,因为当应用于符号表达式时,Hash Python哈希对于Symphy对象是不确定的,hash,sympy,Hash,Sympy,我将符号表达式提供给函数,并希望在输入参数集之前已经处理过时返回以前计算的结果。为此,我考虑对传递给函数的参数进行散列,但这不起作用,因为当应用于符号表达式时,hash似乎不会产生决定性的结果。例如,以下代码打印始终不同的值 import sympy as sym x = sym.symbols('x') print(hash(x)) 有没有一种方法可以确定地散列symphy符号表达式?从这里开始: 作为用户定义类实例的对象可以通过 违约他们都比较不平等(除了他们自己),他们的 哈希值是从其
hash
似乎不会产生决定性的结果。例如,以下代码打印始终不同的值
import sympy as sym
x = sym.symbols('x')
print(hash(x))
有没有一种方法可以确定地散列symphy符号表达式?从这里开始:
作为用户定义类实例的对象可以通过
违约他们都比较不平等(除了他们自己),他们的
哈希值是从其id()派生的
我想这就是您使用不同哈希的原因,因为实例具有不同的id
我希望您能从我发布的第一个文档中获得所需的比较。您遇到了一种称为哈希随机化的安全特性
$ cat hash_test.py
import sympy as sym
x = sym.symbols('x')
print(hash(x))
使用此简单示例运行了几次:
$ python hash_test.py
6842375726913792912
$ python hash_test.py
5041915772945005780
$ python hash_test.py
-3461975266180802906
不使用散列随机化运行以获得相同的结果:
$ PYTHONHASHSEED=0 python hash_test.py
-2285490307665029553
$ PYTHONHASHSEED=0 python hash_test.py
-2285490307665029553
$ PYTHONHASHSEED=0 python hash_test.py
-2285490307665029553
你说总是不同是什么意思<代码>x=符号('x');打印(散列(x));打印(散列(x))代码>应该带两次相同的数字。是的,你是对的,但当我重新运行整个程序时不会。
$ PYTHONHASHSEED=0 python hash_test.py
-2285490307665029553
$ PYTHONHASHSEED=0 python hash_test.py
-2285490307665029553
$ PYTHONHASHSEED=0 python hash_test.py
-2285490307665029553