随机数生成器: 默认种子是什么?

14

对于Python 3,我可以在互联网上的许多不同地方找到默认种子基于系统时间的random模块。

那么Python 2.7也是这样吗?我认为是的,因为如果我启动两个不同的Python进程,在两个进程中都执行import random; random.random(),则会返回不同的结果。

如果使用系统时间作为种子,则实际种子是什么?(例如,“自午夜以来的秒数”或“自UNIX纪元以来的微秒数”或...)如果不是,那么用于种子PRNG的是什么?

1个回答

8
这是关于如何为Random对象生成默认种子的源代码。
try:
    # Seed with enough bytes to span the 19937 bit
    # state space for the Mersenne Twister
    a = long(_hexlify(_urandom(2500)), 16)
except NotImplementedError:
    import time
    a = long(time.time() * 256) # use fractional seconds

urandom 等同于 os.urandom。关于 urandom 的更多信息,请查看此页面


好的,如果我理解正确,这就是Python在没有提供种子的情况下确定要使用的种子的方法。好的,我在哪里可以看到_urandom的代码实现呢? - Ozichukwu
我认为这段源代码是为Python 2编写的,或者已经过时了。根据我在最新的Python 3源代码中的检查, 默认的基于时间的种子在C中实现,似乎使用了GetSystemClockGetMonotonicClock。虽然我对C不太熟悉,但我认为它可能至少包括毫秒或更精确的精度。 - ADTC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接