Changing a variable in a table changes the rest to itself?

I was making a custom animation player but when loading the animation, I need to feel the empty keyframes, bu when I’m generating they CFrame’s, each keyframe replaces the rest that was already generated, for example when it’s at keyframe #26, it will replace all keyframes 25, 24, 23, … to itself, how do I fix this, I have used breakpoints and watcher tool to read the values, here is the script

local function CopyTable(original)
	local copy = {}
	for key, value in pairs(original) do
		copy[key] = value
	end
	return copy
end

local function SortTable(dictionary)
	local array = {}
	for key, value in pairs(dictionary) do
		array[#array+1] = {key = key, value = value}
	end
	table.sort(array, function(a, b)
		return a.key < b.key
	end)
	return array
end


 --  ... rest of the script ...

	local ProcessingKeyframes = SortTable(CopyTable(NewAnimation.Keyframes))
	local LastID = 0
	for keyid, keyraw in pairs(ProcessingKeyframes) do
		local i, keyframe = keyraw.key, keyraw.value
		if LastID ~= 0 then
			local EmptyKeyframes = (i - LastID) - 1
			
			if EmptyKeyframes > 0 then
				for x = LastID + 1, LastID + EmptyKeyframes do
					local PrevKeyframe = CopyTable(ProcessingKeyframes[keyid-1].value)
					
					for poseid, pose in pairs(keyframe.Poses) do
						local prevPose = nil
						local prevPoseID = 0
						
						for keyid, key in pairs(ProcessingKeyframes) do
							if key.key >= i then
								break
							end
							
							for _poseid, _pose in pairs(key.value.Poses) do
								if _pose[1] == pose[1] then
									prevPose = _pose
									prevPoseID = key.key
								end
							end
						end
						
						if prevPose then
							print(prevPose[2].Position)
							PrevKeyframe.Poses[poseid][2] = prevPose[2]:Lerp(pose[2], (x - prevPoseID) / (i - prevPoseID))
						end
					end
					
					NewAnimation.Keyframes[x] = CopyTable(PrevKeyframe)
				end
			end
		end
		LastID = i
	end

I was able to fix the problem after realizing that it was just that I forget to copy tables, changed the CopyTable function to

local function CopyTable(original)
	local copy = {}
	for key, value in pairs(original) do
		if type(value) == "table" then
			copy[key] = CopyTable(value)
		else
			copy[key] = value
		end
	end
	return copy
end