python 3不确定的行为

时间:2016-02-15 03:45:05

标签: python python-3.x dictionary

这是我第一次看到计算机程序的不确定响应 相同的输入,重复传递,而不是显式调用任何 随机性。

考虑以下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中是否应该这样,出于某种原因。

1 个答案:

答案 0 :(得分:1)

Python最近添加了哈希随机化*

https://www.python.org/dev/peps/pep-0456/

它会影响python3.4 +,但也可以在旧版本中启用

要禁用该功能(我们提醒!!!)将环境变量PYTHONHASHSEED设置为某个固定值,每次输出都相同