title: Implementation difference between TensorFlow Variable and TensorFlow Tensor
body: <p>First of all, I am aware that a related question has been asked <a href="https://stackoverflow.com/questions/38556078/in-tensorflow-what-is-the-difference-between-a-variable-and-a-tensor">here</a>.</p>
  
  <p>However, this question is about the implementation and internals. 
  I was reading the paper "<a href="https://arxiv.org/pdf/1610.01178.pdf" rel="noreferrer">A Tour of TensorFlow</a>". The following two points are quoted from there:</p>
  
  <p>1.</p>
  
  <blockquote>
    <p>A tensor itself does not hold or store values in memory, but provides
    only an interface for retrieving the value referenced by the tensor.</p>
  </blockquote>
  
  <p>This suggests to me that a Tensor is an object that simply stores the pointer to a result of an operation and, on retrieving the result or value of the tensor, it simply dereferences that pointer.</p>
  
  <p>2.</p>
  
  <blockquote>
    <p>Variables can be described as persistent, mutable handles to in-memory buffers storing tensors. As such, variables are  characterized by a certain shape and a fixed type.</p>
  </blockquote>
  
  <p>At this I get confused because I thought, based on the previous point, that Tensors simply store a pointer. If they were simply pointers, they could be mutable as well.</p>
  
  <p>To be precise these are my questions:</p>
  
  <ol>
  <li>What is the meaning of "in-memory buffers"?</li>
  <li>What is the meaning of a "handle"?</li>
  <li>Is my initial assumption about the internals of a tensor correct? </li>
  <li>What is the essential internal implementation difference between a tensor and a variable? Why are they declared differently  and why is that difference essential to TensorFlow?</li>
  </ol>