You’re right, peek() doesn’t delete the transaction from the tlm_fifo.
If you use tlm_fifo.get(), then the transaction is ‘popped’ from the FIFO, in other words you get the handle to the transaction and the FIFO removes it from its data queue. This is like popping a stack on a return from a sub-routine in the software world.
If you use tlm_fifo.peek(), then you are returned the handle to the transaction at the top of the FIFO, but the FIFO data queue remains intact.