import itertools import unittest hash_values = [3, 2, 5, 6, 5, 1, 0, 3, 4, 2, 0, 1, 3, 2, 3, 4, 7, 7, 7, 2, 0, 1, 4, 6, 0, 3, 3, 1, 3, 2, 0, 7, 7, 7, 2] hash_i = 0 class Thread2: __slots__ = ('hashvalue',) def __init__(self): global hash_i self.hashvalue = hash_values[hash_i % len(hash_values)] hash_i += 1 def __hash__(self): return self.hashvalue main_thread = Thread2() items = [Thread2() for i in range(10)] dangling = set() class LeakTest(unittest.TestCase): counter = itertools.count() def test_leak(self): item = items[next(self.counter) % len(items)] dangling.add(main_thread) dangling.add(item) dangling.discard(item) dangling.discard(main_thread) assert len(dangling) == 0