0
の数値のセットを出力すると、random.seed(myseed)
を使用しても同じシーケンスが得られません。これは、Python3ではなく、Python2(どちらもDebian安定システム上)で発生します。それは私のコードでバグか何か間違っていますか? python3以下Python3での異常なランダムシードの振る舞い
import random
seed=20.0
random.seed(seed)
print("seed: {}".format(seed))
test = [str(random.randint(0,1000)) for _ in range(10)]
print(', '.join(test))
ss = set(test)
print(', '.join(ss))
各実行で異なる配列を与えるが、Python2は(予想通り)すべてのラン間で類似の配列を提供します。
$ python3 --version
Python 3.4.2
$ python2 --version
Python 2.7.9
#same sequences
$ python2 randtest.py
seed: 20.0
906, 686, 767, 905, 260, 636, 905, 873, 573, 169
906, 636, 905, 573, 767, 873, 260, 169, 686
$ python2 randtest.py
seed: 20.0
906, 686, 767, 905, 260, 636, 905, 873, 573, 169
906, 636, 905, 573, 767, 873, 260, 169, 686
$ python2 randtest.py
seed: 20.0
906, 686, 767, 905, 260, 636, 905, 873, 573, 169
906, 636, 905, 573, 767, 873, 260, 169, 686
#diff sequences
$ python3 randtest.py
seed: 20.0
927, 740, 702, 805, 784, 901, 926, 154, 266, 690
926, 690, 784, 702, 740, 927, 266, 154, 901, 805
$ python3 randtest.py
seed: 20.0
927, 740, 702, 805, 784, 901, 926, 154, 266, 690
702, 926, 784, 901, 154, 266, 805, 690, 740, 927
$ python3 randtest.py
seed: 20.0
927, 740, 702, 805, 784, 901, 926, 154, 266, 690
805, 926, 901, 784, 740, 927, 154, 690, 266, 702
を使用して注文されていることを確認することができますが。しかし、ランダムシードを設定して、そのセットがシードに応じていくつかランダムであるが特定の順序になるように繰り返すと、私は期待しています。私の例では、これはPython2では表示されますが、Python3では表示されません。 –
セットの順序はランダムなシードに依存しないため、前提が正しくない。多分あなたの例のためのpython2の場合ですが、それはそれが常に真実であることを暗示していませんし、python3の場合も暗示しません。 – GWW
理由をより詳しく説明するコメントがあります(http://stackoverflow.com/questions/3848091/python-set-iteration-order-varies-from-run-to-run)。基本的には、メモリ内の場所に依存するオブジェクト 'id()'がハッシュ関数で使用される場合があります。 – GWW