input: Write a function to execute a valid insertion sort on a given list of integers. If the list is empty, return an empty list. If the list contains duplicates, preserve the duplicates while sorting.
  
  
  def insertion_sort(arr):
      for i in range(1, len(arr)):
          key = arr[i]
          j = i - 1
          while j >= 0 and key < arr[j]:
              arr[j + 1] = arr[j]
              j = j - 1
          arr[j + 1] = key
      return arr
  
  assert insertion_sort([4, 3, 2, 10, 12, 1, 5, 6]) == [1, 2, 3, 4, 5, 6, 10, 12]
  assert insertion_sort([4, 3, 3, 5, 1]) == [1, 3, 3, 4, 5]
  assert insertion_sort([]) == []
  assert insertion_sort([1]) == [1]
  assert insertion_sort([3, 3, 3]) == [3, 3, 3]
  
output: def insertion_sort(arr):
      for i in range(1, len(arr)):
          key = arr[i]
          j = i - 1
          while j >= 0 and key < arr[j]:
              arr[j + 1] = arr[j]
              j = j - 1
          arr[j + 1] = key
      return arr