title: NSArray mutableCopy creates new array but still points to old contents
body: <p>I have an <code>NSMutableArray</code> called <code>playersArray</code> in my singleton class which holds for my applications main datasource.
  Each object of <code>playersArray</code> is a <code>NSDictionary</code> and the content is like :</p>
  
  <pre><code>{
      sgfID = 1;
      sgfPlayer = "&lt;PlayerContact: 0xbf851b0&gt;";
  }
  </code></pre>
  
  <p><code>PlayerContact</code> is a <code>NSObject</code> subclass containing properties like:
  NSString * playerName, playerTeam, BOOL PlayerSelected and so on.</p>
  
  <p>In one of my ViewControllers, in <code>viewDidLoad</code>, I want to take a deep copy of <code>playersArray</code> in to a <code>NSMutableArray</code> named <code>duplicatePlayersArray</code>. I do this by </p>
  
  <pre><code>playersArray = [[SGFHelper sharedHelpers] SGFContactsArray];
  duplicatePlayersArray = [playersArray mutableCopy];
  </code></pre>
  
  <p>Now that I have two separate copies, I was under the impression that playersArray and duplicatePlayersArray are two totally different arrays in the memory. However I found that they are NOT!</p>
  
  <p>Even if the debugger shows that they have different memory addresses, their contents have same memory addresses. So when i do this:</p>
  
  <pre><code>[((NSMutableDictionary *)[duplicatePlayersArray objectAtIndex:0]) setObject:@"333" forKey:@"sgfID"];
  </code></pre>
  
  <p>playersArray's dictionary at index:0 has ALSO "333" as key "sgfID" instead of "1" as it used to before the above line of code ran.</p>
  
  <p>BUT, if I run the below code, only then, the two arrays start to differ</p>
  
  <pre><code>[duplicatePlayersArray replaceObjectAtIndex:0 withObject:tempDict];
  </code></pre>
  
  <p>Still this doesn't address my concern because the two arrays which I wanted to believe are different are still "connected". A change in one, results in the other array to change its contents.</p>
  
  <p>Can you friends please show me a way to DEEP COPY the array I explained the contents of in a way where all of their contents are kept in different objects.</p>