Deletes are odd.
Consider a table of people, with separate indexes on First_Name and Last_Name.
I issue : DELETE FROM people WHERE Last_Name = 'Holmes';
It will use the index on Last_Name to find the rows to delete. It finds "Mr Holmes" and deletes the row, then deletes the index entry from the Last_Name index. It also has to delete the entry from the First_Name index though, and first it needs to find that entry in the segment. It has to get the First_Name value from the table for that row, then use that to probe the index to find the entry for that value (and ROWID) so it can delete it.
Rather than using the index to find a row in a table, it actually uses the table to find the row in the index.
Told you they were odd.
I figured it is worth adding a demonstration:
create table persons
(first_name varchar2(30), last_name varchar2(30));
insert into persons values ('Sherlock','Holmes');
create index pers_ln_ix on persons (last_name);
create or replace function dummy_func (i_val in varchar2)
return varchar2 deterministic is
create index pers_fn_ix on persons (dummy_func(first_name));
delete from persons
where last_name = 'Holmes';
If you run that, you'll see that the delete fires the dummy_func function, as it needs to obtain the return value so it can find the entry in the index.