[Python-3000] bytes and dicts (was: PEP 3137: Immutable Bytesand Mutable Buffer) (original) (raw)

Jim Jewett jimjjewett at gmail.com
Sun Sep 30 18:31:23 CEST 2007


At 10:26 AM 9/29/2007 -0500, Michael Urman wrote:

This isn't just a matter of dicts; any collection type can be susceptible.

The reason that dicts (and sets) are even worse is that the comparison could be delayed. If

b"bytes" in [...]

raises an exception, it happens while b"bytes" is still in the traceback context. With a dictionary, the problem comparison could be delayed until the next resize. Even if the TypeError did tell you which dict and (pair of pre-existing) keys were a problem, you still wouldn't know how those keys got there.

Example data flow:

insert string1 with hash X
insert string2 with hash X -- collision, so it moves to the next slot
del string1
insert bytes with hash X -- replaces the dummy entry, so nothing raised yet
...
insert something utterly unrelated, such as an integer.  This

causes a resize, so that now string2 and bytes do collide and raise a TypeError complaining about strings and bytes -- even though the key you added is neither.

-jJ



More information about the Python-3000 mailing list