objects are allways by reference.
That's not true
Actually it is. I'll be a bit nit picky here, but when you use "Var" on an object parameter, what happens is that the *reference* to the object is passed by...reference (!).That's not true
So in your example the call to ChangeList indeed modifies "lista" (which is just a reference), but the object it initally pointed to (the TList instance created on the first line) is kept unchanged.