Neil Cerutti wrote: > On Jan 15, 2008 10:10 AM, <[EMAIL PROTECTED]> wrote: >> I've noticed that I can update() a set with a list but I can't extend a set >> with a list using the |= assignment operator. >> >> >>> s = set() >> >>> s.update([1,2,3]) >> >>> s >> set([1, 2, 3]) >> >>> s |= [4,5,6] >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> TypeError: unsupported operand type(s) for |=: 'set' and 'list' >> >>> s |= set([4,5,6]) >> >>> s >> set([1, 2, 3, 4, 5, 6]) >> >> Why is that? Doesn't the |= operator essentially map to an update() call? > > No, according to 3.7 Set Types, s | t maps to s.union(t). > If the RHS is a set then it works OK:
*** Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32. *** >>> import sets >>> s1= sets.Set([2, 4, 5]) Set([2, 4, 5]) >>> s1= sets.Set([2, 4, 5]) >>> s2= sets.Set([4, 5, 6]) >>> s1|s2 Set([2, 4, 5, 6]) >>> s1|=s2 >>> s1 Set([2, 4, 5, 6]) >>> It could be modifies to handle any iterable on the RHS. Colin W. -- http://mail.python.org/mailman/listinfo/python-list