有没有办法在python中回读随机种子?

时间:2012-10-02 19:54:11

标签: python random seed

我知道如何在python中设置随机种子

random.seed([x])

一旦设置了种子,有什么方法可以读回来并找出传递给seed()函数的值是什么?

2 个答案:

答案 0 :(得分:4)

虽然Python的Random(Mersenne Twister)的基础算法是确定性的,但种子不会存储在实现的内存空间中的任何位置。如有必要,由调用者来存储种子。

http://docs.python.org/library/random.html#module-random

有关Python实现的更多信息(或使用您自己的种子存储随机类覆盖它),请参阅:

http://hg.python.org/cpython/file/0b650272f58f/Lib/random.py

http://hg.python.org/cpython/file/0b650272f58f/Python/random.c

答案 1 :(得分:3)

无法取回种子本身。种子用于更新随机数生成器的内部状态,并且不会直接存储在任何地方。

然而,有一种方法可以保存当前状态!随机模块基于Mersenne Twister伪随机数生成器,并在C中实现(使用_random扩展模块)。你可以这样做:

import random
r = random.Random()
# Use the r object to generate numbers
# ...
curstate = r.__getstate__()
# Use it even more..
#
r.__setstate__(curstate) # Go back to previous state

换句话说,random.Random()对象可以被pickle,你可以使用pickle对象(或直接__getstate__ / __setstate__方法)返回到先前的状态。

相关问题