Python Forum

Full Version: Variables as labels vs fixed storage location
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
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
(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]
Interesting that the "50"s do not share the same location. Like the "labels hanging on the objects" image. Thx for the responses.

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