#python #random #unique #random-sample
#python #уникальный #Случайный
Вопрос:
Ниже у меня есть блок кода, который должен генерировать случайные уникальные строки. Достаточно ли безопасно для этого использовать выборочный метод случайного выбора?
def generate_voucher_code_string(length=13):
rand = random.Random()
rand.seed(get_seq(VOUCHER_CODE_SEQ_KEY))
return ''.join(rand.sample(VOUCHER_CODE_CHARS, length))
Примечание: метод get_seq возвращает другое число каждый раз, когда он вызывается.
Ответ №1:
Нет, случайный модуль может выдавать одинаковые выходные данные для разных начальных значений. Вероятность этого зависит от используемого алгоритма.
Вероятно, вам нужен uuid
модуль, который создает универсально уникальные идентификаторы RFC 4122 на основе хэшей. Хэши обычно настолько велики, что вероятность не уникальности незначительна.
Комментарии:
1. «Нет, случайный модуль может выдавать один и тот же результат для разных начальных значений». Можете ли вы представить доказательства этого? Я искал документацию, ничего не нашел по этому поводу.
2. это не задокументировано, потому что уникальность первых нескольких выборок в зависимости от начального значения не является свойством, которое классифицирует prng. python использует 32-битный mersenne twister, который имеет огромное пространство состояний, поэтому вполне вероятно, что начальный вывод уникален для его начального значения, но модуль random все еще не предназначен для этой цели. Модуль uuid является.