По умолчанию хеш-значения объектов str
подсчитываются с непредсказуемым случайным значением.Хотя они остаются постоянными в рамках отдельного процесса Python, они не предсказуемы между повторными вызовами Python.Изменение значений хеш-функции влияет на порядок итераций множеств.
Итак, при включенной рандомизации хеша вы получите элементы в другом порядке:
$ for i in {1..10}; do python3 -c "frozen = frozenset(('kay', 'snow queen')); print(list(frozen))"; done
['snow queen', 'kay']
['snow queen', 'kay']
['snow queen', 'kay']
['snow queen', 'kay']
['kay', 'snow queen']
['kay', 'snow queen']
['snow queen', 'kay']
['kay', 'snow queen']
['snow queen', 'kay']
['snow queen', 'kay']
Если вы отключите его , вы получите повторяемый, но произвольныйorder:
$ export PYTHONHASHSEED=0
$ for i in {1..10}; do python3 -c "frozen = frozenset(('kay', 'snow queen')); print(list(frozen))"; done
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
Начиная с Python 3.3, рандомизация хэшей по умолчанию включена до Обходной уязвимость безопасности .
См. также: переключатель -R
переводчику .