Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash Python哈希对于Symphy对象是不确定的_Hash_Sympy - Fatal编程技术网

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