Consider this code:
a = {...} # a is an dict with arbitrary contents
b = a.copy()
There are MutableSequence, MutableSet, MutableMapping in module collections. Which can be used to check mutability of premade types.
issubclass(TYPE, (MutableSequence, MutableSet, MutableMapping))
If you want use this on user defined types, the type must be either inherited from one of them or registered as a virtual subclass.
class x(MutableSequence):
...
or
class x:
...
abc.ABCMeta.register(MutableSequence,x)