diff -r 1c6cf4010df3 Lib/_collections_abc.py --- a/Lib/_collections_abc.py Thu May 05 11:14:06 2016 +0300 +++ b/Lib/_collections_abc.py Thu May 05 18:28:34 2016 +0800 @@ -860,7 +860,8 @@ i = start while stop is None or i < stop: try: - if self[i] == value: + v = self[i] + if v is value or v == value: return i except IndexError: break @@ -869,7 +870,7 @@ def count(self, value): 'S.count(value) -> integer -- return number of occurrences of value' - return sum(1 for v in self if v == value) + return sum(1 for v in self if v is value or v == value) Sequence.register(tuple) Sequence.register(str) diff -r 1c6cf4010df3 Lib/test/test_collections.py --- a/Lib/test/test_collections.py Thu May 05 11:14:06 2016 +0300 +++ b/Lib/test/test_collections.py Thu May 05 18:28:34 2016 +0800 @@ -1082,17 +1082,22 @@ class CustomSequence(list): def __contains__(self, value): return Sequence.__contains__(self, value) + def index(self, value, start=0, stop=None): + return Sequence.index(self, value, start, stop) + def count(self, value): + return Sequence.count(self, value) nan = float('nan') obj = CustomEqualObject() - containers = [ - CustomSequence([nan, obj]), - ItemsView({1: nan, 2: obj}), - ValuesView({1: nan, 2: obj}) - ] + seq = CustomSequence([nan, obj, nan]) + containers = [seq, ItemsView({1: nan, 2: obj}), ValuesView({1: nan, 2: obj})] for container in containers: for elem in container: self.assertIn(elem, container) + self.assertEqual(seq.index(nan), 0) + self.assertEqual(seq.index(obj), 1) + self.assertEqual(seq.count(nan), 2) + self.assertEqual(seq.count(obj), 1) def assertSameSet(self, s1, s2): # coerce both to a real set then check equality