Dataclasses, immutability(?), and ChatGPT

Roel Schroeven roel at roelschroeven.net
Wed Apr 12 04:02:51 EDT 2023


Op 12/04/2023 om 6:58 schreef dn via Python-list:
> Are dataclasses (or instances thereof) mutable or immutable?
> - and in what sense?
Instances of dataclasses are mutable, just like normal classes. 
Dataclasses *are* normal classes, with some extra special methods. They 
are totally different from namedtuples, even though the use cases 
somewhat overlap. They *can* be immutable, I think, if the programmer 
takes care to make them so. I don't think adding __hash__() is enough: 
as I understand it's an indication that a class is immutable, but 
doesn't actually by itself make it so. "Mutability is a complicated 
property that depends on the programmer’s intent, the existence and 
behavior of |__eq__()|, and the values of the |eq| and |frozen| flags in 
the |dataclass()| 
<https://docs.python.org/3.10/library/dataclasses.html#dataclasses.dataclass> 
decorator.", says the documentation.
> Amongst the four benefits ChatGPT listed was:
> «
> Immutable instances: By default, instances of dataclasses are 
> immutable, which means that once created, their attributes cannot be 
> modified. This can help to prevent unintended modifications to the data.
> »
>
> Huh? If we'd been discussing namedtuples over (say) dictionaries, I'd 
> perhaps have accepted the reply.
ChatGPT is wrong.
> Anything I've 'missed'?
> - or a salutary tale of not depending upon ChatGPT etc?
You didn't miss anything, ChatGPT is wrong. The thing to look out for is 
that when ChatGPT is wrong, it sounds just as convincing as when it's 
right; there is no indication in it's tone or style that it's making 
things up. Always double check!

-- 
"A common mistake that people make when trying to design something completely
foolproof is to underestimate the ingenuity of complete fools."
         -- Douglas Adams


More information about the Python-list mailing list