@@ -222,15 +222,27 @@ def test():
222222
223223 objects = m.get_objects_in_singleton()
224224 expected = [
225- type(None),
226- tuple,
227- list,
228- dict,
229- collections.OrderedDict,
230- collections.defaultdict,
231- collections.deque,
225+ type(None), # static type: shared between interpreters
226+ tuple, # static type: shared between interpreters
227+ list, # static type: shared between interpreters
228+ dict, # static type: shared between interpreters
229+ collections.OrderedDict, # static type: shared between interpreters
230+ collections.defaultdict, # heap type: dynamically created per interpreter
231+ collections.deque, # heap type: dynamically created per interpreter
232232 ]
233- assert objects == expected, f"Expected {{expected!r}}, got {{objects!r}}."
233+ # Check that we have the expected objects. Avoid IndexError by checking lengths first.
234+ assert len(objects) == len(expected), (
235+ f"Expected {{expected!r}} ({{len(expected)}}), got {{objects!r}} ({{len(objects)}})."
236+ )
237+ # The first ones are static types shared between interpreters.
238+ assert objects[:-2] == expected[:-2], (
239+ f"Expected static objects {{expected!r}} ({{len(expected)}}), got {{objects!r}} ({{len(objects)}})."
240+ )
241+ # The last two are heap types created per-interpreter.
242+ # The expected objects are dynamically imported from `collections`.
243+ assert objects[-2:] == expected[-2:], (
244+ f"Expected heap objects {{expected!r}} ({{len(expected)}}), got {{objects!r}} ({{len(objects)}})."
245+ )
234246
235247 assert hasattr(m, 'MyClass'), "Module missing MyClass"
236248 assert hasattr(m, 'MyGlobalError'), "Module missing MyGlobalError"
0 commit comments