在64位Python 2.7.6中为True,但是在32位Python 2.7.3中为False:

random.Random(hash("a")).random() == random.Random("a").random()

那么,Python 2.7.3哈希字符串如何为随机数生成器提供种子呢?

最佳答案

这是因为在32位上hash("a")是一个负数(由于平台长类型的大小),并且随机模块的行为有所不同。

随机模块seed()函数:

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

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

    例如。:
  • abs(-10) = 10
  • ((unsigned long) -10) = 4294967286
  • 关于python - Python 2.7.3哈希字符串如何用于为随机数生成器提供种子?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23260975/

    10-11 22:32
    查看更多