add self assignment operator