>>> d = {tuple(range(2)): 'treffer'}
>>> d[(0,1)]
'treffer'

– es geht also.

Dass man keine veränderbaren Werte als Dictionaryschlüssel haben möchte, liegt daran, dass die Semantik von sowas sehr kitzlig wäre. In einem hypothetischen Python, das Listen als Schlüssel zuließe, könne man folgendes schreiben:

>>> l = [1,2]
>>> k = [1,2]
>>> d[l] = 2   # falsch!!!
>>> l.append(3)
>>> d[[1,2]]
# Soll *das* einen KeyError geben oder 2?
>>> d[l]
# oder sollte das lieber einen KeyError geben?
>>> d[k]
# und dies hier?