title: What are the differences between Set, FrozenSet, MutableSet and AbstractSet in python typing module?
body: <p>I am trying to annotate my code with types but I am a little confused when it comes to sets. I read some points in <a href="https://www.python.org/dev/peps/pep-0484/" rel="noreferrer">PEP 484</a>:</p>
  
  <blockquote>
    <p>Note: Dict , List , Set and FrozenSet are mainly useful for annotating return values. For arguments, prefer the abstract collection types defined below, e.g. Mapping , Sequence or AbstractSet . </p>
  </blockquote>
  
  <p>and</p>
  
  <blockquote>
    <p>Set, renamed to AbstractSet . This name change was required because Set in the typing module means set() with generics. </p>
  </blockquote>
  
  <p>but this does not help.</p>
  
  <p>My first question is: what are the commonalities and differences between Set, FrozenSet, MutableSet and AbstractSet?</p>
  
  <p>My second question is: why if I try</p>
  
  <pre><code>from collections import FrozenSet
  </code></pre>
  
  <p>I get</p>
  
  <pre><code>ImportError: cannot import name 'FrozenSet'
  </code></pre>
  
  <p>?</p>
  
  <p>I am using Python 3.4 and I have installed mypy-lang via pip.</p>