In Python 3, the inheritance hierarchy is firmly rooted at object, but in Python 2 things are less clear-cut. While it's true for both version that “everything is an object” the real question is “what type of object”?
So here's a program that it's instructive to run under both versions (I hope).
class OldStyle:
pass
class NewStyle(object):
pass
old_obj = OldStyle()
new_obj = NewStyle()
print(OldStyle, NewStyle)
print(old_obj, new_obj)
To make it easier to see what's going on I simply pasted the program into different interepreters, the output being shown below.
airhead:project sholden$ python2
Python 2.7.6 (default, Nov 19 2013, 03:12:29)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class OldStyle:
... pass
...
>>> class NewStyle(object):
... pass
...
>>> old_obj = OldStyle()
>>> new_obj = NewStyle()
>>>
>>> print(OldStyle, type(OldStyle))
(<class __main__.OldStyle at 0x105345808>, <type 'classobj'>)
>>> print(NewStyle, type(NewStyle))
(<class '__main__.NewStyle'>, <type 'type'>)
>>> print(old_obj, type(old_obj))
(<__main__.OldStyle instance at 0x10535ff38>, <type 'instance'>)
>>> print(new_obj, type(new_obj))
(<__main__.NewStyle object at 0x105360bd0>, <class '__main__.NewStyle'>)
>>>
Versus
airhead:project sholden$ python3
Python 3.3.2 (default, Nov 19 2013, 03:15:33)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class OldStyle:
... pass
...
>>> class NewStyle(object):
... pass
...
>>> old_obj = OldStyle()
>>> new_obj = NewStyle()
>>>
>>> print(OldStyle, type(OldStyle))
<class '__main__.OldStyle'> <class 'type'>
>>> print(NewStyle, type(NewStyle))
<class '__main__.NewStyle'> <class 'type'>
>>> print(old_obj, type(old_obj))
<__main__.OldStyle object at 0x106884c90> <class '__main__.OldStyle'>
>>> print(new_obj, type(new_obj))
<__main__.NewStyle object at 0x106884c50> <class '__main__.NewStyle'>
>>>
You will see that there are actually relatively few significant differences between the two outputs, which is to Guido van Rossum's credit as a language designer, because a major departure took place around the time of the 2.2 release.
Focusing on the specifics, in Python 2.x a class that does not inherit from object is of type classobj, and its instances will be of type(instance). In Python 3.x, however, the class is of type type, and the instances are of type __main__.NewStyle.
In both versions I believe it is true that there is no object x for which the expression isinstance(object, x) evaluates to False.