Я предполагаю, что вы используете python 2, и это может быть связано с поведением кодировки по умолчанию. Значение, указанное в вашем наборе, является «закодированным» значением, и когда вы используете print
(который основан на базовых методах __repr__
и/или __str__
объекта), вы получаете декодированный/обработанный вывод (в соответствии с системной кодировкой по умолчанию).
Вы можете получить информацию о кодировке по умолчанию, используемой с функцией sys.getdefaultencoding()
Заметим, что в Python 3, кодирование utf-8
по умолчанию (то есть. По умолчанию «любая строка создается (...) хранится в Unicode ", в соответствии с documentation), и у вас не будет такого же поведения (вы можете увидеть в фрагмент python 2, что хешированные значения, поскольку python set
s основаны на них, совпадают, если ваша входная строка закодирована или не):
Python 2:
>>> a = b'Path\xc3\xa9'
>>> a
'Path\xc3\xa9'
>>> print(a)
Pathé
>>> sys.getdefaultencoding()
'ascii'
>>> hash('Pathé')
8776754739882320435
>>> hash(b'Path\xc3\xa9')
8776754739882320435
Python 3:
>>> a = b'Path\xc3\xa9'
>>> a
b'Path\xc3\xa9'
>>> print(a)
b'Path\xc3\xa9'
>>> print(a.decode())
Pathé
>>> sys.getdefaultencoding()
'utf-8'
>>> hash("Pathé")
1530394699459763000
>>> hash(b"Path\xc3\xa9")
1621747577200686773