まず、NSCopyingを正しく理解したことを確認したい...
単純なNSObjectサブクラスをNSDictionaryのキーとして使用するには、NSCopyingプロトコルを実装する必要があります。コピーされたインスタンスのcopyWithZoneメソッドで、クラスの新しいインスタンスを割り当て/初期化し、そのプロパティをコピーされたインスタンスと同じになるように設定して、それを返す必要があります。
次に、NSDictionaryがインスタンス自体ではなく、追加されたインスタンスのコピーを使用するのはなぜですか?