### Summary

User module is not idempotent when update_password: always parameter set in the playbook for macOS 

Result is always showing changed if use already present and no changes in the password . 



### Issue Type

Bug Report

### Component Name

user

### Ansible Version

```console
ansible 2.9.21
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/navarihtak/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/navarihtak/.local/lib/python3.8/site-packages/ansible
  executable location = /home/navarihtak/.local/bin/ansible
  python version = 3.8.10 (default, Nov 14 2022, 12:59:47) [GCC 9.4.0]
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
$ ansible-config dump --only-changed
DEFAULT_VAULT_PASSWORD_FILE(env: ANSIBLE_VAULT_PASSWORD_FILE) = /home/navarihtak/.ansible/.vault_pass
HOST_KEY_CHECKING(env: ANSIBLE_HOST_KEY_CHECKING) = False
$
```


### OS / Environment

All MacOS version 

### Steps to Reproduce

```yaml
      - name: Add user for Darwin
        user:
          name: "{{ username }}"
          comment: "{{ username }}"
          shell: "/bin/bash"
          group: "{{ user_group }}"
          password: "{{ user_pass }}"
          update_password: always
          state: present
        when: ansible_os_family == 'Darwin'
        become: yes
```

### Expected Results

It should be idempotent. Result status should shows ok if user is already exist and password is not changed. 

### Actual Results

```console
Always shows result status is changed if user is already exist and password is not changed.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''Add or remove SELF.NAME to or from GROUP depending on ACTION.
        ACTION can be 'add' or 'remove' otherwise 'remove' is assumed. '''
        rc = 0
        out = ''
        err = ''
        changed = False
        current = set(self._list_user_groups())
        if self.groups is not None:
            target = self.get_groups_set(names_only=True)
        else:
            target = set([])
        if self.append is False:
            for remove in current - target:
                (_rc, _out, _err) = self.__modify_group(remove, 'delete')
                rc += rc
                out += _out
                err += _err
                changed = True
        for add in target - current:
            (_rc, _out, _err) = self.__modify_group(add, 'add')
            rc += _rc
            out += _out
            err += _err
            changed = True
        return (rc, out, err, changed)
    def _update_system_user(self):