• Tim Peters's avatar
    Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask". · 2f228e75
    Tim Peters yazdı
    The comment following used to say:
    	/* We use ~hash instead of hash, as degenerate hash functions, such
    	   as for ints <sigh>, can have lots of leading zeros. It's not
    	   really a performance risk, but better safe than sorry.
    	   12-Dec-00 tim:  so ~hash produces lots of leading ones instead --
    	   what's the gain? */
    That is, there was never a good reason for doing it.  And to the contrary,
    as explained on Python-Dev last December, it tended to make the *sum*
    (i + incr) & mask (which is the first table index examined in case of
    collison) the same "too often" across distinct hashes.
    
    Changing to the simpler "i = hash & mask" reduced the number of string-dict
    collisions (== # number of times we go around the lookup for-loop) from about
    6 million to 5 million during a full run of the test suite (these are
    approximate because the test suite does some random stuff from run to run).
    The number of collisions in non-string dicts also decreased, but not as
    dramatically.
    
    Note that this may, for a given dict, change the order (wrt previous
    releases) of entries exposed by .keys(), .values() and .items().  A number
    of std tests suffered bogus failures as a result.  For dicts keyed by
    small ints, or (less so) by characters, the order is much more likely to be
    in increasing order of key now; e.g.,
    
    >>> d = {}
    >>> for i in range(10):
    ...    d[i] = i
    ...
    >>> d
    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
    >>>
    
    Unfortunately. people may latch on to that in small examples and draw a
    bogus conclusion.
    
    test_support.py
        Moved test_extcall's sortdict() into test_support, made it stronger,
        and imported sortdict into other std tests that needed it.
    test_unicode.py
        Excluced cp875 from the "roundtrip over range(128)" test, because
        cp875 doesn't have a well-defined inverse for unicode("?", "cp875").
        See Python-Dev for excruciating details.
    Cookie.py
        Chaged various output functions to sort dicts before building
        strings from them.
    test_extcall
        Fiddled the expected-result file.  This remains sensitive to native
        dict ordering, because, e.g., if there are multiple errors in a
        keyword-arg dict (and test_extcall sets up many cases like that), the
        specific error Python complains about first depends on native dict
        ordering.
    2f228e75
Adı
Son kayıt (commit)
Son güncelleme
..
compiler Loading commit data...
curses Loading commit data...
distutils Loading commit data...
encodings Loading commit data...
idlelib Loading commit data...
lib-old Loading commit data...
lib-tk Loading commit data...
plat-aix3 Loading commit data...
plat-aix4 Loading commit data...
plat-beos5 Loading commit data...
plat-freebsd2 Loading commit data...
plat-freebsd3 Loading commit data...
plat-freebsd4 Loading commit data...
plat-freebsd5 Loading commit data...
plat-generic Loading commit data...
plat-irix5 Loading commit data...
plat-irix6 Loading commit data...
plat-linux1 Loading commit data...
plat-linux2 Loading commit data...
plat-netbsd1 Loading commit data...
plat-next3 Loading commit data...
plat-riscos Loading commit data...
plat-sunos4 Loading commit data...
plat-sunos5 Loading commit data...
plat-unixware7 Loading commit data...
site-packages Loading commit data...
test Loading commit data...
xml Loading commit data...
BaseHTTPServer.py Loading commit data...
Bastion.py Loading commit data...
CGIHTTPServer.py Loading commit data...
ConfigParser.py Loading commit data...
Cookie.py Loading commit data...
FCNTL.py Loading commit data...
MimeWriter.py Loading commit data...
Queue.py Loading commit data...
SimpleHTTPServer.py Loading commit data...
SocketServer.py Loading commit data...
StringIO.py Loading commit data...
TERMIOS.py Loading commit data...
UserDict.py Loading commit data...
UserList.py Loading commit data...
UserString.py Loading commit data...
__future__.py Loading commit data...
aifc.py Loading commit data...
anydbm.py Loading commit data...
asynchat.py Loading commit data...
asyncore.py Loading commit data...
atexit.py Loading commit data...
audiodev.py Loading commit data...
base64.py Loading commit data...
bdb.py Loading commit data...
binhex.py Loading commit data...
bisect.py Loading commit data...
builtin.py Loading commit data...
calendar.py Loading commit data...
cgi.py Loading commit data...
chunk.py Loading commit data...
cmd.py Loading commit data...
code.py Loading commit data...
codecs.py Loading commit data...
codeop.py Loading commit data...
colorsys.py Loading commit data...
commands.py Loading commit data...
compileall.py Loading commit data...
copy.py Loading commit data...
copy_reg.py Loading commit data...
dbhash.py Loading commit data...
difflib.py Loading commit data...
dircache.py Loading commit data...
dis.py Loading commit data...
doctest.py Loading commit data...
dospath.py Loading commit data...
dumbdbm.py Loading commit data...
filecmp.py Loading commit data...
fileinput.py Loading commit data...
fnmatch.py Loading commit data...
formatter.py Loading commit data...
fpformat.py Loading commit data...
ftplib.py Loading commit data...
getopt.py Loading commit data...
getpass.py Loading commit data...
gettext.py Loading commit data...
glob.py Loading commit data...
gopherlib.py Loading commit data...
gzip.py Loading commit data...
htmlentitydefs.py Loading commit data...
htmllib.py Loading commit data...
httplib.py Loading commit data...
ihooks.py Loading commit data...
imaplib.py Loading commit data...
imghdr.py Loading commit data...
imputil.py Loading commit data...
inspect.py Loading commit data...
keyword.py Loading commit data...
knee.py Loading commit data...
linecache.py Loading commit data...
locale.py Loading commit data...
macpath.py Loading commit data...
macstat.py Loading commit data...
macurl2path.py Loading commit data...
mailbox.py Loading commit data...
mailcap.py Loading commit data...
mhlib.py Loading commit data...
mimetools.py Loading commit data...
mimetypes.py Loading commit data...
mimify.py Loading commit data...
multifile.py Loading commit data...
mutex.py Loading commit data...
netrc.py Loading commit data...
nntplib.py Loading commit data...
ntpath.py Loading commit data...
nturl2path.py Loading commit data...
os.py Loading commit data...
pdb.doc Loading commit data...
pdb.py Loading commit data...
persist.py Loading commit data...
pickle.py Loading commit data...
pipes.py Loading commit data...
popen2.py Loading commit data...
poplib.py Loading commit data...
posixfile.py Loading commit data...
posixpath.py Loading commit data...
pprint.py Loading commit data...
pre.py Loading commit data...
profile.doc Loading commit data...
profile.py Loading commit data...
pstats.py Loading commit data...
pty.py Loading commit data...
py_compile.py Loading commit data...
pyclbr.py Loading commit data...
pydoc.py Loading commit data...
quopri.py Loading commit data...
random.py Loading commit data...
re.py Loading commit data...
reconvert.py Loading commit data...
regex_syntax.py Loading commit data...
regsub.py Loading commit data...
repr.py Loading commit data...
rexec.py Loading commit data...
rfc822.py Loading commit data...
rlcompleter.py Loading commit data...
robotparser.py Loading commit data...
sched.py Loading commit data...
sgmllib.py Loading commit data...
shelve.py Loading commit data...
shlex.py Loading commit data...
shutil.py Loading commit data...
site.py Loading commit data...
smtpd.py Loading commit data...
smtplib.py Loading commit data...
sndhdr.py Loading commit data...
socket.py Loading commit data...
sre.py Loading commit data...
sre_compile.py Loading commit data...
sre_constants.py Loading commit data...
sre_parse.py Loading commit data...
stat.py Loading commit data...
statcache.py Loading commit data...
statvfs.py Loading commit data...
string.py Loading commit data...
stringold.py Loading commit data...
sunau.py Loading commit data...
sunaudio.py Loading commit data...
symbol.py Loading commit data...
symtable.py Loading commit data...
tabnanny.py Loading commit data...
telnetlib.py Loading commit data...
tempfile.py Loading commit data...
threading.py Loading commit data...
toaiff.py Loading commit data...
token.py Loading commit data...
tokenize.py Loading commit data...
traceback.py Loading commit data...
tty.py Loading commit data...
types.py Loading commit data...
tzparse.py Loading commit data...
unittest.py Loading commit data...
urllib.py Loading commit data...
urllib2.py Loading commit data...
urlparse.py Loading commit data...
user.py Loading commit data...
uu.py Loading commit data...
warnings.py Loading commit data...
wave.py Loading commit data...
weakref.py Loading commit data...
webbrowser.py Loading commit data...
whichdb.py Loading commit data...
whrandom.py Loading commit data...
xdrlib.py Loading commit data...
xmllib.py Loading commit data...
zipfile.py Loading commit data...