There’s a good article on the topic in the Python wiki: Why Lists Can’t Be Dictionary Keys. As explained there:
What would go wrong if Python allowed using lists as keys, say, using their memory location as the hash?
It would cause some unexpected behavior. Lists are generally treated as if their value was derived from their content’s values, for instance when checking (in-)equality. Many would – understandably – expect that you can use any list
[1, 2] to get the same key, where you’d have to keep around exactly the same list object. But lookup by value breaks as soon as a list used as a key is modified, and lookup by identity requires keeping track of that exact list object – which isn’t an ordinary requirement for working with lists.
Other objects, such as modules and
object, make a much bigger deal out of their object identity anyway (when was the last time you had two distinct module objects called
sys?), and are compared by that anyway. Therefore, it’s less surprising – or even expected – that they, when used as dict keys, compare by identity in that case as well.