hashlib
содержит реализации алгоритмов хеширования. К сожалению, два последовательных вызова hashlib.sha256()
создают не два разных экземпляра SHA256, а один и тот же: при двойном вызове hashlib.sha256()
каждый раз будет возвращаться один и тот же объект. Итак, видимо, у нас здесь синглтон
Это плохо во всех ситуациях, когда требуется какой-либо параллелизм. Кроме того, это очень плохо в ситуациях, когда вы хотите предоставить объект хэширования для некоторого алгоритма. В моем случае: тесты терпят неудачу, поскольку один и тот же объект используется повторно вместо создания нового.
Мой вопрос: как мне создать два экземпляра SHA256 (или любого другого алгоритма хеширования)?
Пример:
import hashlib
print(hashlib.sha256())
print(hashlib.sha256())
Это выведет что-то вроде:
<sha256 HASH object @ 0x7fb3611b4710>
<sha256 HASH object @ 0x7fb3611b4710>
<sha256 HASH object @ 0x101f9a260>
... можете ли вы предоставить код, который вы используете для определения этого? Я подозреваю, что вы неправильно используетеid
(скорее, попадаете в слишком распространенную ловушку). Обратите внимание, для меняhashlib.sha256() is hashlib.sha256()
возвращаетFalse
- person juanpa.arrivillaga   schedule 26.02.2019id
, то есть в этом примере0x7fb3611b4710
, потому что в CPython, как только счетчик ссылок достигает нуля, объект восстанавливается. Объект существует достаточно долго, чтобы его можно было передать вprint
. Среда выполнения CPython оптимизирует выделение памяти и вполне может повторно использовать память из последнего объекта. - person juanpa.arrivillaga   schedule 26.02.2019