18 Chapter 3. Data model The Python Language Reference, Release 3.9.5 of a container, only the identities of the immediately contained objects are implied. So, if an immutable container (like a tuple) contains a reference to a mutable object, its value changes if that mutable object is changed. Types affect almost all aspects of object behavior. Even the importance of object identity is affected in some sense: for immutable types, operations that compute new values may actually return a reference to any existing object with the same type and value, while for mutable objects this is not allowed. E.g., after$_{a = 1; b = 1}$ ,$_{a}$ and$_{b}$ may or may not refer to the same object with the value one, depending on the implementation, but after$_{c = []; d =}$ $_{[]}$,$_{c}$ and$_{d}$ are guaranteed to refer to two different, unique, newly created empty lists. (Note that$_{c = d = []}$ assigns the same object to both c and d .) Below is a list of the types that are built into Python. Extension modules (written in C, Java, or other languages, depending on the implementation) can define additional types. Future versions of Python may add types to the type hierarchy (e.g., rational numbers, efficiently stored arrays of integers, etc.), although such additions will often be provided via the standard library instead. Some of the type descriptions below contain a paragraph listing ‘special attributes.’ These are attributes that provide access to the implementation and are not intended for general use. Their definition may change in the future. • A sign is shown only when the number is negative. • Trailing zeros, possibly excepting a single zero after a decimal point, are not shown. • Leading zeros, possibly excepting a single zero before a decimal point, are not shown. • The representation is in base 10, when possible. • They are valid numeric literals which, when passed to their class constructor, produce an object having the value of the original numeric. $_{numbers.Number}$These are created by numeric literals and returned as results by arithmetic operators and arith- metic built-in functions. Numeric objects are immutable; once created their value never changes. Python numbers are of course strongly related to mathematical numbers, but subject to the limitations of numerical representation in computers. Ellipsis This type has a single value. There is a single object with this value. This object is accessed through the literal$_{...}$ or the built-in name$_{Ellipsis}$ . Its truth value is true. NotImplemented This type has a single value. There is a single object with this value. This object is accessed through the built-in name$_{NotImplemented}$ . Numeric methods and rich comparison methods should return this value if they do not implement the operation for the operands provided. (The interpreter will then try the reflected operation, or some other fallback, depending on the operator.) It should not be evaluated in a boolean context. None This type has a single value. There is a single object with this value. This object is accessed through the built-in name$_{None}$ . It is used to signify the absence of a value in many situations, e.g., it is returned from functions that don’t explicitly return anything. Its truth value is false. 3.2 The standard type hierarchy See implementing-the-arithmetic-operations for more details. Changed in version 3.9: Evaluating$_{NotImplemented}$in a boolean context is deprecated. While it currently evaluates as true, it will emit a$_{DeprecationWarning}$ . It will raise a$_{TypeError}$ in a future version of Python. The string representations of the numeric classes, computed by$_{__repr__()}$ and$_{__str__()}$ , have the following properties: Python distinguishes between integers, floating point numbers, and complex numbers: There are two types of integers: numbers.Integral These represent elements from the mathematical set of integers (positive and nega- tive).