List of Classes overwriting itself

So I have a List of a List of classes. I’m adding a new instance of a class to the inner list in Update().

However, when I’ve finished adding, all instances of the class are equal to the most recently created class.

To check this, when the player walks into a certain collider, it prints out the randomNum member variable of every element in the list. This should generally always be different each time, but as stated before, it’s not.
I have absolutely no idea why this is occurring. Can someone help me out?

public class TimeManager : MonoBehaviour
{
    //Lists
    private List<List<ObjectInfo>> RecordedInformation = new List<List<ObjectInfo>>();
    private List<GameObject> movableObjects = new List<GameObject>();

//Game Objects
private GameObject pastPlayer = null;
private GameObject player;

//Enums
StateOfTime TimeState;

public class ObjectInfo
{
    public Vector3 currPosition;
    public Quaternion currRotation;
    public int index;
    public int randomNum;
    public ObjectInfo(Vector3 position, Quaternion rotation, int listIndex)
    {
        currPosition = position;
        currRotation = rotation;
        index = listIndex;
        randomNum = Random.Range(0, 1000000);
    }
}

void Start()
{
    movableObjects.Add(player = GameObject.Find("Player"));
    RecordedInformation.Add(new List<ObjectInfo>());
}

void Update()
{
    if (TimeState == StateOfTime.NORMAL) RecordObjectInfo();
    else if (TimeState == StateOfTime.REVERSE) RewindTime();
    else if (TimeState == StateOfTime.PLAYBACK) { }
   
}

void OnTriggerEnter(Collider col)
{
    if (col.gameObject == player && TimeState == StateOfTime.NORMAL)
    {
        pastPlayer = Instantiate(Resources.Load("Player AI")) as GameObject;
        movableObjects[0] = pastPlayer;
        TimeState = StateOfTime.REVERSE;
        for (int i = 0; i < RecordedInformation[0].Count - 1; i++) Debug.Log(RecordedInformation[0][RecordedInformation[0].Count - 1].randomNum );
    }
}

void RewindTime()
{
    for (int i = 0; i < movableObjects.Count; i++) //For every movable object
    {
        int lastIndex = RecordedInformation_[RecordedInformation*.Count - 1].index;*_

movableObjects_.transform.position = RecordedInformation*[lastIndex].currPosition;
movableObjects.transform.rotation = RecordedInformation[lastIndex].currRotation;_

_RecordedInformation[lastIndex].index–;_
_Debug.Log(RecordedInformation[lastIndex].index);
if (i == movableObjects.Count - 1 && lastIndex == 0)
{
TimeState = StateOfTime.PLAYBACK;
return;
}
}
}
void RecordObjectInfo()
{
for (int i = 0; i < movableObjects.Count; i++)
{
RecordedInformation.Add(new ObjectInfo(player.transform.position, player.transform.rotation, RecordedInformation.Count - 1));
}
}
}*_

Inside of ‘OnTriggerEnter’ function you are using the same index in the loop:

for (int i = 0; i < RecordedInformation[0].Count - 1; i++) Debug.Log(RecordedInformation[0][RecordedInformation[0].Count - 1].randomNum ); }

you need to use the index ‘i’ instead:

for (int i = 0; i < RecordedInformation[0].Count - 1; i++) %|-102160993_2|% }