CHAPTER
THREE
Data model
3.1 Objects, values and types
Objects are Python’s abstraction for data. All data in a Python program is represented by objects or by relations
between objects. (In a sense, and in conformance to Von Neumann’s model of a “stored program computer,” code
is also represented by objects.)
Every object has an identity, a type and a value. An object’s identity never changes once it has been created;
you may think of it as the object’s address in memory. The ‘is’ operator compares the identity of two objects;
the id() function returns an integer representing its identity (currently implemented as its address). An object’s
type is also unchangeable.
1
An object’s type determines the operations that the object supports (e.g., “does it
have a length?”) and also defines the possible values for objects of that type. The type() function returns an
object’s type (which is an object itself). The value of some objects can change. Objects whose value can change
are said to be mutable; objects whose value is unchangeable once they are created are called immutable. (The
value of an immutable container object that contains a reference to a mutable object can change when the latter’s
value is changed; however the container is still considered immutable, because the collection of objects it contains
cannot be changed. So, immutability is not strictly the same as having an unchangeable value, it is more subtle.)
An object’s mutability is determined by its type; for instance, numbers, strings and tuples are immutable, while
dictionaries and lists are mutable.
Objects are never explicitly destroyed; however, when they become unreachable they may be garbage-collected.
An implementation is allowed to postpone garbage collection or omit it altogether — it is a matter of implemen-
tation quality how garbage collection is implemented, as long as no objects are collected that are still reachable.
(Implementation note: the current implementation uses a reference-counting scheme with (optional) delayed de-
tection of cyclically linked garbage, which collects most objects as soon as they become unreachable, but is not
guaranteed to collect garbage containing circular references. See the
Python Library Reference for information on
controlling the collection of cyclic garbage.)
Note that the use of the implementation’s tracing or debugging facilities may keep objects alive that would nor-
mally be collectable. Also note that catching an exception with a ‘try...except’ statement may keep objects
alive.
Some objects contain references to “external” resources such as open files or windows. It is understood that
these resources are freed when the object is garbage-collected, but since garbage collection is not guaranteed to
happen, such objects also provide an explicit way to release the external resource, usually a close() method.
Programs are strongly recommended to explicitly close such objects. The ‘try...finally’ statement provides
a convenient way to do this.
Some objects contain references to other objects; these are called containers. Examples of containers are tuples,
lists and dictionaries. The references are part of a container’s value. In most cases, when we talk about the value
of a container, we imply the values, not the identities of the contained objects; however, when we talk about the
mutability 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.
1
Since Python 2.2, a gradual merging of types and classes has been started that makes this and a few other assertions made in this manual
not 100% accurate and complete: for example, it is now possible in some cases to change an object’s type, under certain controlled conditions.
Until this manual undergoes extensive revision, it must now be taken as authoritative only regarding “classic classes”, that are still the default,
for compatibility purposes, in Python 2.2 and 2.3. For more information, see http://www.python.org/doc/newstyle.html.
13