Everything in Python is an object. From an instance of a class to an attribute of that instance and even the class itself.
An Object has three basic properties that govern all of its behaviours. These are:
The identity of an object distinguishes it from other objects and will never
change. You can get the identity of an object using the
>>> name = "John" >>> id(name) 4375513072
You can also compare two variables and see if they have the same identity with
>>> a = "a" >>> b = "b" >>> a is b False >>> a is a True
It is important to point out that a variable is different to an object (in fact a variable is a reference to an object) so two different variables may resolve to the same identity and therefore the same object.
>>> a = "a" >>> also_a = a >>> a is also_a True
In CPython, and object’s identity is its address in memory
The type of an object determines what operations it supports and also what possible values it can hold. It can never change once an object is created.
You can find the type of an object using the
>>> type("a") <class 'str'> >>> type(1) <class 'int'> >>> type(True) <class 'bool'>
An object’s value may be represented differently depending on its type. For example, the value of a string is the sequence of characters it represents, whereas the value of a List can be the sequence of objects that it holds, as well as the composite value of each item in the List.
Whether or not an object’s value can change depends on the mutability of its type. Note that in some situations an immutable object’s value may change if it is a container holding mutable objects, but more on that next time.