title: collections.Iterable vs typing.Iterable in type annotation and checking for Iterable
body: <p>I found that in Python both <code>collections.Iterable</code> and <code>typing.Iterable</code> can be used in type annotation and checking for whether an object is iterable, i.e., both <code>isinstance(obj, collections.Iterable)</code> and <code>isinstance(obj, typing.Iterable)</code> works. My question is, what are the differences among them? And which one is preferred in which situations? </p>