title: If a namedtuple is immutable, why does it have a _replace method?
body: <p>Please consider this code:</p>
  
  <pre><code>&gt;&gt;&gt; point = namedtuple('point', ('x', 'y'))
  &gt;&gt;&gt; p1 = point(3,4)
  point(x=3, y=4)
  &gt;&gt;&gt; id(p1)
  2881782633456  # address in memory
  
  &gt;&gt;&gt; p1._replace(x = 78)
  point(x=78, y=4)
  &gt;&gt;&gt; id(p1)
  2881782633456  # same as before. 
  </code></pre>
  
  <p>Seems like i mutated the <code>namedtuple</code> in-place i.e. it is a mutable object. But it says everywhere that <code>tuple</code>s and <code>namedtuple</code>s are both immutable objects. I am confused. </p>
  
  <p>Furthermore, if it is an immutable object, why does it have a <code>_replace</code> method? </p>