On Feb 24, 9:11 pm, [EMAIL PROTECTED] wrote: > On Feb 24, 7:58 pm, Jeff Schwab <[EMAIL PROTECTED]> wrote: > > > > > [EMAIL PROTECTED] wrote: > > > Can someone explain this? > > > >>>> a= {} > > > Create an empty dict and bind it to the name a. > > > >>>> a[(3,)]= 0 > > > Set the key/value pair (3,):0 to the dict. > > > >>>> (3,) in a > > > Is (3,) one of the keys in the dict? > > > > True > > > Yes, it is. > > > >>>> (3,) is (3,) > > > Create two separate tuples (that happen to be equivalent). Are they the > > same object? > > > > False > > > No, they are not. > > > Every time you write (3,), you are potentially creating a new object. > > These objects have equal values (and hash codes), so they are > > interchangeable for purposes of keying a dict. > > I see. You stated, > > > Is (3,) one of the keys in the dict? > > > > True > > > Yes, it is. > > It isn't, but it does equal a key that's already in the dict.
Right, dict lookup depends on object hashing (__hash__) and equality (__eq__), not identity. There are legitimate cases where lookup should be based on identity [1], but they are far less common than those based on equality. George [1] http://www.martinfowler.com/eaaCatalog/identityMap.html -- http://mail.python.org/mailman/listinfo/python-list