docs: def update(records, column, values):
      """Update the column of records
  
      :param records: a list of dictionaries
      :param column: a string
      :param values: an iterable or a function
      :returns: new records with the columns updated
  
      >>> movies = [
      ... {'title': 'The Holy Grail', 'year': 1975, 'budget': 4E5, 'total_gross': 5E6},
      ... {'title': 'Life of Brian', 'year': 1979, 'budget': 4E6, 'total_gross': 20E6},
      ... {'title': 'The Meaning of Life', 'year': 1983, 'budget': 9E6, 'total_gross': 14.9E6}
      ... ]
      >>> new_movies = update(movies, 'budget', lambda x: 2*x)
      >>> [new_movies[i]['budget'] for i,_ in enumerate(movies)]
      [800000.0, 8000000.0, 18000000.0]
  
      >>> new_movies2 = update(movies, 'budget', (40, 400, 900))
      >>> [new_movies2[i]['budget'] for i,_ in enumerate(movies)]
      [40, 400, 900]
  
      """
      new_records = deepcopy(records)
  
      if values.__class__.__name__ == 'function':
          for row in new_records:
              row[column] = values(row[column])
      elif isiterable(values):
          for i, row in enumerate(new_records):
              row[column] = values[i]
      else:
          msg = "You must provide a function or an iterable."
          raise ValueError(msg)
      return new_records