Где я могу найти источник или алгоритм хеша Python () функцией?

>>> hash("\x01")
128000384
>>> hash("\x02")
256000771
>>> hash("\x03")
384001154
>>> hash("\x04")
512001541

Интересная часть 128000384 x 2 не 256000771, и также другие

Я просто задаюсь вопросом, как тот алгоритм работает, и хотят изучить что-то на нем.

23
задан Adam Stelmaszczyk 22 September 2015 в 23:23
поделиться

1 ответ

Если вы загрузите исходный код Python, вы найдете это точно! Но имейте в виду использование хеш-функции реализуется для каждого вида объектов по-разному.

Например, вы найдете функцию HASH Unicode в объектах / UnicodeObject.c в функции Unicode_Hash . Возможно, вам придется выглядеть немного больше, чтобы найти функцию хеш-строки. Найдите структуру, определяющую заинтересованность объекта, и в поле TP_HASH , вы найдете функцию, которая вычисляет хеш-код этого объекта.

Для String Object : точный код найден в объектов / stringobject.c в функции String_hash :

static long string_hash(PyStringObject *a)
{
    register Py_ssize_t len;
    register unsigned char *p;
    register long x;

    if (a->ob_shash != -1)
        return a->ob_shash;
    len = Py_SIZE(a);
    p = (unsigned char *) a->ob_sval;
    x = *p << 7;
    while (--len >= 0)
        x = (1000003*x) ^ *p++;
    x ^= Py_SIZE(a);
    if (x == -1)
        x = -2;
    a->ob_shash = x;
    return x;
}
31
ответ дан 29 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: