如果先前生成的值被显式设置为新种子,为什么Python random.random()会给出不同的值?

Ama*_*l K 0 python random random-seed

我已经读过randomPython 中的模块使用先前生成的值作为种子,但第一次使用系统时间除外。(/sf/answers/1584782671/https://pynative.com/python-random-seed/)如果这是真的,为什么我没有拿到相同的值时,我明确设置之前产生价值,就像这样的新种子:

random.seed(random.randint(1, 100))
Run Code Online (Sandbox Code Playgroud)

同样对于该random.random()方法也不起作用。

random.seed(random.randint(1, 100))
Run Code Online (Sandbox Code Playgroud)

为什么最后一次randint()通话不给88?

提前致谢!

Tim*_*ers 8

因为您读到的是错误的,或者您误解了它的意思。CPython在后台使用Mersenne Twister生成器,该生成器占用状态19933位。您传递给什么.seed()不是新的状态,而只是一堆表示经由无证(实现相关的)算法扩展到全19937位状态位。

注意:如果要保存和还原状态,则是.getstate().setstate()方法的目的。


Del*_*gan 5

Pythonrandom模块不使用先前生成的值作为种子。但是,Python 使用Mersenne Twister生成器来创建伪随机性。该算法是确定性的:这意味着它的下一个状态(下一个生成的数字)取决于前一个状态。这与种子不同,种子是用于配置生成器初始状态的值。