4

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

random.seed([x])

设置种子后,有什么方法可以将其读回并找出传递给 seed() 函数的值?

4

2 回答 2

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

于 2012-10-02T19:57:30.260 回答
3

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

但是,有一种方法可以保存当前状态!random 模块基于 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() 对象可以被腌制,您可以使用腌制对象(或__getstate__/__setstate__方法直接)回到以前的状态。

于 2012-10-02T20:03:16.443 回答