diff -r 62438d1b11c7 Lib/_collections_abc.py --- a/Lib/_collections_abc.py Fri May 02 23:26:03 2014 +0200 +++ b/Lib/_collections_abc.py Fri May 02 20:13:05 2014 -0400 @@ -194,10 +194,7 @@ return NotImplemented if len(self) > len(other): return False - for elem in self: - if elem not in other: - return False - return True + return all(elem in other for elem in self) def __lt__(self, other): if not isinstance(other, Set): @@ -219,9 +216,6 @@ return NotImplemented return len(self) == len(other) and self.__le__(other) - def __ne__(self, other): - return not (self == other) - @classmethod def _from_iterable(cls, it): '''Construct an instance of the class from any iterable input. @@ -238,10 +232,7 @@ def isdisjoint(self, other): 'Return True if two sets have a null intersection.' - for value in other: - if value in self: - return False - return True + return all(value not in self for value in other) def __or__(self, other): if not isinstance(other, Iterable): @@ -432,14 +423,13 @@ return NotImplemented return dict(self.items()) == dict(other.items()) - def __ne__(self, other): - return not (self == other) - Mapping.register(mappingproxy) class MappingView(Sized): + __slots__ = '_mapping', + def __init__(self, mapping): self._mapping = mapping @@ -452,6 +442,8 @@ class KeysView(MappingView, Set): + __slots__ = () + @classmethod def _from_iterable(self, it): return set(it) @@ -467,6 +459,8 @@ class ItemsView(MappingView, Set): + __slots__ = () + @classmethod def _from_iterable(self, it): return set(it) @@ -489,11 +483,10 @@ class ValuesView(MappingView): + __slots__ = () + def __contains__(self, value): - for key in self._mapping: - if value == self._mapping[key]: - return True - return False + return any(v == value for v in self) def __iter__(self): for key in self._mapping: @@ -614,20 +607,11 @@ raise IndexError def __iter__(self): - i = 0 - try: - while True: - v = self[i] - yield v - i += 1 - except IndexError: - return + for i in range(len(self)): + yield self[i] def __contains__(self, value): - for v in self: - if v == value: - return True - return False + return any(v == value for v in self) def __reversed__(self): for i in reversed(range(len(self))):