Table.insert changes all values in loop

for _, runnerId in ipairs(self.Runners) do
        local runner = Players:GetPlayerByUserId(runnerId)
        npcs[runnerId] = {}
        for i = 1, self.NpcCopyCount do
            local npc = NPCModule.New(runner, self.Map)
            table.insert(npcs[runnerId], npc)

npcs[runnerId] is all filled up with last npc of the for loop, why’s that?

Have you confirmed the NPC module returning different values every time?
Is the runnerId definitely different every time?

Different npc gets created for sure and runnerId is also different each loop