Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are numbers considered objects in python?

I am aware that numeric values are immutable in python. I have also read how everything is an object in python. I just want to know if numeric types are also objects in python. Because if they are objects, then the variables are actually reference variables right? Does it mean that if I pass a number to a function and modify it inside a function, then two number objects with two references are created? Is there a concept of primitive data types in python?

Note: I too was thinking it as objects. But visualizing in python tutor says differnt: http://www.pythontutor.com/visualize.html#mode=edit

def test(a):
    a+=10
b=100
test(b)

Or is it a defect in the visualization tool?

like image 302
codingsplash Avatar asked May 20 '15 04:05

codingsplash


People also ask

What are considered objects in Python?

Python Objects and Classes An object is simply a collection of data (variables) and methods (functions) that act on those data. Similarly, a class is a blueprint for that object. We can think of a class as a sketch (prototype) of a house. It contains all the details about the floors, doors, windows, etc.

Is a number an object?

Number is a primitive wrapper object used to represent and manipulate numbers like 37 or -9.25 . The Number constructor contains constants and methods for working with numbers. Values of other types can be converted to numbers using the Number() function.

Is integer an object in Python?

That being said, there are different types of objects: Python treats integers as a different type of object than a string, for instance.

Are all values in Python objects?

You can read more on the set of all Python built-in types here. Just remember — no matter the type of a value in Python, it is an object!


2 Answers

Are numeric types objects?

>>> isinstance(1, object)
True

Apparently they are. :-).

Note that you might need to adjust your mental model of an object a little. It seems to me that you're thinking of object as something that is "mutable" -- that isn't the case. In reality, we need to think of python names as a reference to an object. That object may hold references to other objects.

name = something

Here, the right hand side is evaluated -- All the names are resolved into objects and the result of the expression (an object) is referenced by "name".

Ok, now lets consider what happens when you pass something to a function.

def foo(x):
   x = 2

z = 3
foo(z)
print(z)

What do we expect to happen here? Well, first we create the function foo. Next, we create the object 3 and reference it by the name z. After that, we look up the value that z references and pass that value to foo. Upon entering foo, that value gets referenced by the (local) name x. We then create the object 2 and reference it by the local name x. Note, x has nothing to do with the global z -- They're independent references. Just because they were referencing the same object when you enter the function doesn't mean that they have to reference the function for all time. We can change what a name references at any point by using an assignment statement.

Note, your example with += may seem to complicate things, but you can think of a += 10 as a = a + 10 if it helps in this context. For more information on += check out: When is "i += x" different from "i = i + x" in Python?

like image 199
mgilson Avatar answered Oct 18 '22 13:10

mgilson


Everything in Python is an object, and that includes the numbers. There are no "primitive" types, only built-in types.

Numbers, however, are immutable. When you perform an operation with a number, you are creating a new number object.

like image 41
nneonneo Avatar answered Oct 18 '22 15:10

nneonneo