2016-04-08 13 views
-1

私は2つの異なるプロジェクトで2つの異なる関数のハッシュを生成しました。 1つのプロジェクトはPython 2.7環境を使用し、他のプロジェクトはPython 3.4を使用しました。私はそれらの2つのハッシュと一致する必要があります。python 2.7と3.4の同じハッシュ値を生成する方法

x=("asd","def") 
    hash(x) 

一致しません。何か案が?前もって感謝します。

+0

あなたはpythonの組み込みハッシュ関数に制限されていますか? –

+0

はまだビルトイン機能で道を探しています。もし見つからなければ私はカスタム@JoelsElfのために行く –

答えて

2

まあ、運がいいです。 __hash__の内部詳細は実装の詳細とみなされます。さらに、3.3以降のPythonsでは、文字列のハッシュ関数はデフォルトでランダム化されています。計算は、32ビットバージョンと64ビットバージョンが異なります(値はPy_ssize_tに切り捨てられます)。

たとえば、Python 3.5が64ビットで、Python 2.7が32ビットの場合は、

>>> hash((1, 2, 3)) & 0xFFFFFFFF 

のように、Python 3の値を0xFFFFFFFFで試して2.7の値を取得することができます。

+0

ありがとう。しかし、それは文字列の値には機能しません。 –

+0

@SunnoSakibは、Python 2と3の両方からハッシュ値を与えてください。 –

+0

python 3.4:hash( "" asd "、" def ")) - > -1259920402 ..... hash((" asd "、" def "))&0xFFFFFFFF python 2.7:hash(" "asd"、 "def")) 923829442 ...ハッシュ( "" asd "、" def "))&0xFFFFFFFF 923829442L –

関連する問題