Python 2.7.3哈希字符串如何用于种子随机数生成器?

Nat*_*eit 9 python random python-2.7

在64位Python 2.7.6中,这是真的,但在32位Python 2.7.3中,它是错误的:

random.Random(hash("a")).random() == random.Random("a").random()
Run Code Online (Sandbox Code Playgroud)

那么Python 2.7.3哈希字符串如何用于种子随机数生成器呢?

she*_*pya 9

这是因为在32位hash("a")是负数(因为平台长类型大小),随机模块的行为不同.

随机模块seed()函数:

  • 传递int或long它将使用PyNumber_Absolute()abs()
  • 传递它将使用的对象(字符串) PyLong_FromUnsignedLong((unsigned long)hash)

符号位截断和abs给出不同的结果

例如:

  • abs(-10) = 10
  • ((unsigned long) -10) = 4294967286