I stumbled across the open source SAGE project this past week. Among many other things, SAGE uses Python to unify the many disparate programming languages introduced by packages like Mathematica and MATLAB. I figured SAGE would finally be a good excuse to improve my lousy Python skills, and I started reading Dive Into Python.
During it's description of Python dictionaries, Dive Into Python makes the comment that
"A dictionary in Python is like an instance of the Hashtable class in Java."Immediately I've got some bad lingering associations from my former IBM server-side Java work. Hashtable access is inherently synchronized in Java, but many programmers aren't aware that they're paying synchronization overhead on every get and put. These folks learned about Hashtables from Java 1.1 material and never moved onward to Maps as the Collections framework improved. Scarier still is when people do know about Hashtable synchronization but fail to use newer mechanisms like Collections.synchronizedMap wrappers and ConcurrentMap implementers to document their synchronization needs explicitly.
All in all, Dive Into Python's analogy seemed wrong. So I bugged Michael Gilfix. Mike's my single source for all questions involving at least two of the trio "Java/Python/threads":
Hey Mike, I ran across > A dictionary in Python is like an instance of the Hashtable class in Java. in a python tutorial I was skimming. Do they really mean Hashtable with all the underlying synchronization implications? Or do they mean HashMap and didn't think hard enough about the analogy? Thanks, Rhys
To which he replied:
Hey. It's like a hashmap. You need to synchronize using something like mutexes from the threading package. None of the built in collection types come with built in synchronization. Sounds like you're having fun.