Python Forum
Variables as labels vs fixed storage location - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Variables as labels vs fixed storage location (/thread-5193.html)



Variables as labels vs fixed storage location - cnoblejr - Sep-21-2017

Is this a nit? For example.

>>> y = 5
>>> id(y)
4297636480
>>> y = 7
>>> id(y)
4297636544
>>> x = 5
>>> id(x)
4297636480
>>>

Clearly the "stuff" on the right-hand side are objects and have a fixed location. The y and x are just labels that point to the objects.

Most books say that variables are like boxes stored somewhere by the compiler/assembler/loader and the items that appear on the right-hand side get placed in the appropriate box.

Is this a "so what?" not a big enough deal to mention? Can not teaching that ever hurt anything?

Seems simpler to think of variables as boxes rather than labels that get hung on (point to) objects.

Not sure of the best way to handle this.

Thx,

C


RE: Variables as labels vs fixed storage location - nilamo - Sep-21-2017

Well, you're also using small ints.  Those, in particular, will have the same id... but only on cpython.  Any other implementation of python (IronPython, jython, pypy, etc) might not work that way.  And that's only because of an optimization the cpython compiler uses (it assumes small ints are used fairly frequently, so it just caches them and shares them all over the place).

If you try the same thing with strings, it doesn't do that anymore...

# 50 is the same...
>>> id(50)
1426349088
>>> id(50)
1426349088
>>> id(50)
1426349088
>>> id(50)
1426349088

# but "50" is not the same...
>>> id("50")
31633984
>>> id("50")
31635328
>>> id("50")
31635296
>>> id("50")
31634464
>>> id("50")
31633920



RE: Variables as labels vs fixed storage location - snippsat - Sep-21-2017

(Sep-21-2017, 07:08 PM)cnoblejr Wrote: Clearly the "stuff" on the right-hand side are objects and have a fixed location. The y and x are just labels that point to the objects.
id() show identity of an object the number is the object memory address.
x any y can both can point to same memory address.
>>> x = 5
>>> y = x
>>> id(x)
1434501200
>>> id(y)
1434501200
(Sep-21-2017, 07:08 PM)cnoblejr Wrote: Most books say that variables are like boxes stored somewhere by the compiler/assembler/loader and the items that appear on the right-hand side get placed in the appropriate box.
Python dos it an other way than most languages other-languages-have-variables.
Python has "names"
Quote:Seems simpler to think of variables as boxes rather than labels that get hung on (point to) objects.
No boxes is more correct to describe how other languages use variables.
This picture show the Python model,that name labels can get hung on same object in memory.
[Image: ab2tag.png]


RE: Variables as labels vs fixed storage location - cnoblejr - Sep-25-2017

Interesting that the "50"s do not share the same location. Like the "labels hanging on the objects" image. Thx for the responses.

C


RE: Variables as labels vs fixed storage location - nilamo - Sep-26-2017

"50" was maybe a bad example, but no two strings would share the same location, regardless of content.