Some basics and simplifications.
When you click an object on an array, it does not make a copy of object..it is a reference to this object. This is a critical concept for understanding in javascript and fundamental to working with angular
Editing the same object after clicking it into the array will edit both instances, since they are links to the same object. This is probably your memory problem.
We can use angular.copy() to help there.
usuarios.push(angular.copy(usario));
Now another very useful part of angular ng-model is that you do not need to set all object properties for ng-model . If the property does not exist, ng-model will create it.
This means that now we can simply reset usario with an empty object:
usario = {};
then edit this object in the form and when it is completed and confirmed in the form, click on a new copy of the array and reset again
Now, if you want to edit an existing user, you do not need to manually copy all the values โโof each property in usario , we can use angular.extend() to do this
this.editar = function(usuarioEditar){ angular.extend(usario, usuarioEditar); }
Now all usuarioEditar properties usuarioEditar used to overwrite or create usario properties if they were not there.
Similarly, when using $http to send usario we can send the whole object
if(usuario.id == ""){ var postData = angular.copy(usario) delete data.id; $http.post(ROOT+'usuarios/insertar', postData ).then(...
As you can see, this will greatly simplify all object processing and reduce a lot of time and code.
I hope this answers some of your questions and helps you move forward.
References
angular.copy ()
angular.extend ()