Ich sehe nicht-deterministisches Verhalten beim Versuch, ein Pseudozufalls-Element aus Mengen auszuwählen, obwohl der RNG gesetzt ist (Beispielcode unten gezeigt). Warum passiert das und sollte ich erwarten, dass andere Python-Datentypen ein ähnliches Verhalten zeigen?Gesättigte Python-Zufallszahlen, die nichtdeterministisches Verhalten mit Mengen zeigen
Hinweise: Ich habe dies nur auf Python 2.7 getestet, aber es ist auf zwei verschiedenen Windows-Computern reproduzierbar.
Ähnliche Ausgabe: Das Problem bei Python random seed not working with Genetic Programming example code kann ähnlich sein. Basierend auf meinen Tests ist meine Hypothese, dass Run-to-run-Speicherzuweisungsdifferenzen innerhalb der Sätze dazu führen, dass verschiedene Elemente für denselben RNG-Zustand aufgenommen werden.
Bis jetzt habe ich in den Python-Dokumenten für Satz oder Zufall keine Erwähnung dieser Art von Vorbehalt gefunden.
Beispiel-Code (randTest erzeugt verschiedenen Ausgang Run-to-run):
import random
''' Class contains a large set of pseudo-random numbers. '''
class bigSet:
def __init__(self):
self.a = set()
for n in range(2000):
self.a.add(random.random())
return
''' Main test function. '''
def randTest():
''' Seed the PRNG. '''
random.seed(0)
''' Create sets of bigSet elements, presumably many memory allocations. '''
b = set()
for n in range (2000):
b.add(bigSet())
''' Pick a random value from a random bigSet. Would have expected this to be deterministic. '''
c = random.sample(b,1)[0]
print('randVal: ' + str(random.random())) #This value is always the same
print('setSample: ' + str(random.sample(c.a,1)[0])) #This value can change run-to-run
return
Python 3.5 hat das gleiche Verhalten. –