What is the need of using clone for minimizing factory overrides for stimulus objects

I was referring to UVM testbench speed-up article where i found below code:

   //High performance code
   class generate_seq extends uvm_sequence#(seq_item);
      task body;
          seq_item orig_item =seq_item::type_id::create("item");
          seq_item item;
 
          repeat(200) begin
	      $cast(item, orig_item.clone());
	      start_item(item);
	      assert(item.randomize());
	      finish_item(item);
       endtask
    endclass

What is the need of cloning orig_item? If i am passing orig_item directly to start_item() then also i am seeing different values in transaction.

In reply to jyotsna:

The factory create() method can have lots of overhead depending on how many different overrides exist. It has to search through a lot of strings. But if your seq_item has a large amount of data, it’s not going to be any faster. I think using
$cast( item, orig_item.create())
would be faster. uvm_object::create() is clone without the copy.

Thanks Dave but my original question is that why do we need to create transaction everytime in the loop? Cannot we create transaction once outside the loop and use it for start_item()?