Consider this code:
a = {...} # a is an dict with arbitrary contents
b = a.copy()
How do I check if a type is mutable in Python?
1) Keys must not be mutable, unless you have a user-defined class that is hashable but also mutable. That's all that's forced upon you. However, using a hashable, mutable object as a dict key might be a bad idea.
2) By not sharing values between the two dicts. It's OK to share the keys, because they must be immutable. Copying the dictionary, in the copy
module sense, is definitely safe. Calling the dict constructor here works, too: b = dict(a)
. You could also use immutable values.
3) All built-in immutable types are hashable. All built-in mutable types are not hashable. For an object to be hashable, it must have the same hash over its entire lifetime, even if it is mutated.
4) Not that I'm aware of; I'm describing 2.x.
A type is mutable if it is not immutable. A type is immutable if it is a built-in immutable type: str
, int
, long
, bool
, float
, tuple
, and probably a couple others I'm forgetting. User-defined types are always mutable.
An object is mutable if it is not immutable. An object is immutable if it consists, recursively, of only immutable-typed sub-objects. Thus, a tuple of lists is mutable; you cannot replace the elements of the tuple, but you can modify them through the list interface, changing the overall data.