Python 3.3+collectionsterm
collections.abc.Container
collections.abc — protocols
The protocol for membership testing with `in` (has __contains__).
Syntax
isinstance(obj, collections.abc.Container)
This check asks a single question: does the object define __contains__? The in operator is more forgiving — without __contains__ it falls back to iterating via __iter__, or even via legacy integer __getitem__ — so plenty of objects work with in yet fail the Container check. Note also that Container promises nothing about len() or iteration; those belong to Sized and Iterable.
Examples
import collections.abc as abc
print(isinstance([1], abc.Container)) # → True
print(isinstance('abc', abc.Container)) # → True
print(isinstance({'a': 1}, abc.Container)) # → True
print(isinstance(iter([1]), abc.Container)) # → False
print(1 in iter([1, 2])) # → True
See also
Open in the full glossarydocs.python.orgReport an inaccuracy