这是我第一次看到计算机程序的不确定响应 相同的输入,重复传递,而不是显式调用任何 随机性。
考虑以下python3脚本,名为strange.py:
#!/usr/bin/env python3
def main():
opts_list=[['1', 'a'], ['2', 'b']]
opts_dict={}
for pair in opts_list:
opts_dict[pair[1]] = pair[0]
print( opts_dict )
return
main()
当脚本成为可执行文件时,从shell运行多次
$ ./strange.py
有时会得到{' a':' 1','''' 2'},其他时间{&#39} ; b':' 2',' a':' 1'}。下面的bash命令序列将运行40次并打印观察到的每个订单的计数:
$ rm -f tempfile ; for i in {1..40} ; do ./strange.py >> tempfile ; done; echo "$( grep "a.*b" tempfile | wc -l ) a-b ordered pairs and $( grep "b.*a" tempfile | wc -l ) b-a ordered pairs in the 40 runs"
这对我来说似乎很奇怪。在python 2中没有观察到上述行为(只使用python解释器而不是python3运行脚本),我注意到它将我的旧脚本翻译为python 3。
我想知道在python3中是否应该这样,出于某种原因。
答案 0 :(得分:1)
Python最近添加了哈希随机化*
https://www.python.org/dev/peps/pep-0456/
它会影响python3.4 +,但也可以在旧版本中启用
要禁用该功能(我们提醒!!!)将环境变量PYTHONHASHSEED设置为某个固定值,每次输出都相同