哈希numpy对象数组,hashlib如何查看对象的内容而不仅仅是指针?

2024-10-01 07:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道,为什么对np对象[]中的字符串进行哈希运算会产生预期的结果:

>>> hashlib.sha256(np.array(['asdfda'], dtype=object)).hexdigest()
'6cc08fd2542235fe8097c017c20b85350899c81616db8cb59045022663e3cee1'
>>> hashlib.sha256(np.array(['asd'+'fda'], dtype=object)).hexdigest()
'6cc08fd2542235fe8097c017c20b85350899c81616db8cb59045022663e3cee1'

也就是说,散列将考虑实际的对象值,而不仅仅是存储在数组中的指针值。(这些字符串肯定会有不同的指针。)

hashlib方法似乎接受支持某些“缓冲区API”的对象,因为不这样做会产生TypeError: object supporting the buffer API required

这是否意味着numpy的ndarray的缓冲区API实现不返回指针数组,而是返回字符串数组,或者换句话说hashlib.hash_algorithm如何访问存储的字符串


Tags: 对象字符串apiobjectnp数组arrayhashlib
1条回答
网友
1楼 · 发布于 2024-10-01 07:21:11

Those strings would definitely have different pointers.

在这里肯定是一个非常有力的说法。看看我在REPL中测试的结果:

>>> s = 'asdfda'
>>> s2 = 'asd'+'fda'
>>> s is s2
True

但是,

>>> s3 = s[:2] + s[2:]
>>> s is s3
False
>>>

正如所料,散列是不同的:

>>> hashlib.sha256(np.array([s],dtype=object)).hexdigest()
'176c63097ace4b6754acdd8e37b861bbe1e33489f52d6bd8df07983ead23c73e'
>>> hashlib.sha256(np.array([s3],dtype=object)).hexdigest()
'478307a1bfb4bf413c7e538cc4bbe02370072b0968a91155a4a838e68477f62e'
>>>

相关问题 更多 >