Let's assume MyMap does have a __setitem__ method. Extending what you pointed out, the assignment
    >>> m[K(1, 2, 3, a=4, b=5)] = 'foobar'
will then be equivalent to
    >>> MyMap.__setitem__(m, k, 'foobar')
    >>> k = K(1, 2, 3, a=4, b=5)

 This is confusing to me because `my_mapping[1,2,3]` is already valid syntax equivalent to `my_mapping.__setitem__(my_mapping, (1,2,3))`. Wouldn't a change to translate the tuple into this K object lead to big problems for a lot of existing code...?