配列の値の遷移を保存しておきたいと思い、下の例のようなプログラムを作成しました。

NSMutableDictionary*  historyDic = [NSMutableDictionary dictionary];
NSMutableArray* array = [NSMutableArray array];

[array addObject:@"1"];
[historyDic setObject:array forKey:@"First"];

[array addObject:@"2"];
[historyDic setObject:array forKey:@"Second"];

[array addObject:@"3"];
[historyDic setObject:array forKey:@"Third"];

NSLog(@"First ->%@" , [historyDic objectForKey:@"First"]);
NSLog(@"Second->%@" , [historyDic objectForKey:@"Second"]);
NSLog(@"Third ->%@" , [historyDic objectForKey:@"Third"]);

しかし、このように辞書に途中途中でオブジェクトを保存しても参照として保存されるのでどのキーのオブジェクトも読み出し時の状態になってしまっています。

実行結果:

First -> (1,2,3)
Second-> (1,2,3)
Third -> (1,2,3)

期待した結果:

First -> (1)
Second-> (1,2)
Third -> (1,2,3)

NSMutableDictionaryに参照ではなく、値としてオブジェクトを保存する方法はないのでしょうか?