在C中,我们可以找到的大小int,char等我想知道如何获得物体的大小就像一个字符串,整数,等在Python.
我使用的XML文件包含指定值大小的大小字段.我必须解析这个XML并进行编码.当我想更改特定字段的值时,我将检查该值的大小字段.在这里,我想比较一下我输入的新值是否与XML中的值相同.我需要检查新值的大小.在字符串的情况下,我可以说它的长度.但是在int,float等的情况下我很困惑.
假设我们有十亿个独特的图像,每个图像一兆字节.我们计算每个文件内容的SHA-256哈希值.碰撞的可能性取决于:
假设它为零,我们可以在多大程度上忽略这种可能性?
我试图了解引擎盖下的python哈希函数.我创建了一个自定义类,其中所有实例都返回相同的哈希值.
class C(object):
def __hash__(self):
return 42
Run Code Online (Sandbox Code Playgroud)
我只是假设上面的类中只有一个实例可以随时出现在一个集合中,但实际上一个集合可以有多个具有相同散列的元素.
c, d = C(), C()
x = {c: 'c', d: 'd'}
print x
# {<__main__.C object at 0x83e98cc>:'c', <__main__.C object at 0x83e98ec>:'d'}
# note that the dict has 2 elements
Run Code Online (Sandbox Code Playgroud)
我进行了一些实验,发现如果我重写__eq__方法使得类的所有实例比较相等,那么该集只允许一个实例.
class D(C):
def __eq__(self, other):
return hash(self) == hash(other)
p, q = D(), D()
y = {p:'p', q:'q'}
print y
# {<__main__.D object at 0x8817acc>]: 'q'}
# note that the dict has only 1 element
Run Code Online (Sandbox Code Playgroud)
所以我很想知道dict有多个具有相同哈希的元素.谢谢!
注意:编辑问题以给出dict(而不是set)的例子,因为答案中的所有讨论都是关于dicts的.但这同样适用于集合; 集合也可以有多个具有相同散列值的元素.
我已经在python 3.3中实现了BloomFilter,并且每次会话都得到了不同的结果.深入研究这种奇怪的行为让我进入了内部的hash()函数 - 它为每个会话返回相同字符串的不同哈希值.
例:
>>> hash("235")
-310569535015251310
Run Code Online (Sandbox Code Playgroud)
-----打开一个新的python控制台-----
>>> hash("235")
-1900164331622581997
Run Code Online (Sandbox Code Playgroud)
为什么会这样?为什么这有用?
"数字配方"一书提供了一种计算64位哈希码的方法,以减少冲突次数.
该算法显示在http://www.javamex.com/tutorials/collections/strong_hash_code_implementation_2.shtml中,并在此处复制以供参考:
private static final createLookupTable() {
byteTable = new long[256];
long h = 0x544B2FBACAAF1684L;
for (int i = 0; i < 256; i++) {
for (int j = 0; j < 31; j++) {
h = (h >>> 7) ^ h;
h = (h << 11) ^ h;
h = (h >>> 10) ^ h;
}
byteTable[i] = h;
}
return byteTable;
}
public static long hash(CharSequence cs) {
long h = HSTART;
final long hmult = …Run Code Online (Sandbox Code Playgroud) hash ×4
python ×3
algorithm ×1
dictionary ×1
equality ×1
math ×1
memory ×1
object ×1
probability ×1
python-3.3 ×1
security ×1
set ×1
sha ×1
sizeof ×1
statistics ×1