title: BehaviorSubject: mutating current value between subscriptions
body: <p>Assume I have BehaviorSubject with User interface:</p>
  <pre><code>interface User {
    firstName: string;
    lastName: string;
  }
  
  let user: User = {
    firstName: 'Cuong',
    lastName: 'Le',
  };
  
  let bs = new BehaviorSubject&lt;User&gt;(user);
  </code></pre>
  <p>There are two subsciptions, <code>sub1</code> tried to change the first name. <code>Sub2</code> subscribes later and user object has first name changed also as the <code>sub1</code> did change it before:</p>
  <pre><code>let sub1 = bs.subscribe((u) =&gt; {
    u.firstName = 'An';
  
    console.log(u);
  });
  
  let sub2 = bs.subscribe((u) =&gt; {
    console.log(u);
  });
  </code></pre>
  <p>it's hard to debug when this case happens in big Angular application. How we make the value immutable when subscribing?</p>
  <p>I am looking deep immutable solution to prevent code somewhere else to change the data instead of the shadow one</p>