Ну, обычно хеш-функции (и вообще криптографические функции) работают с байтами. Строки Python являются в основном байтовыми строками. Если вы хотите вычислить хэш некоторого объекта, вы должны преобразовать его в строковое представление. Просто убедитесь, что примените ту же операцию позже, если вы хотите проверить правильность хэша. И убедитесь, что ваше строковое представление не содержит изменяющихся данных, которые вы не хотите проверять.
Редактировать: из-за популярного запроса короткое напоминание о том, что строки Unicode в Python содержат не байты, а точки кода Unicode. Каждая кодовая точка Unicode содержит несколько байтов (2 или 4, в зависимости от того, как был скомпилирован интерпретатор Python). Строки Python содержат только байты. Таким образом, строки Python (тип str ) являются типом, наиболее похожим на массив байтов.