The short answer is that I agree with you.

In fact, the link you shared is an example of my favourite incorrect mental
model, which even prompted me to post this rant
https://learnpython.wordpress.com/2015/05/21/notes-on-teaching-python-mental-models/
some months ago.

TL;DR - "in Python 'variables' are post-its, not buckets". (to use one of
my own homely metaphors)

Cheers,
Naomi

On 15 February 2016 at 13:02, kirby urner <kirby.ur...@gmail.com> wrote:

>
> What do educators think about this discussion of variables in Python?
>
> http://www.python-course.eu/variables.php
>
> I find the "variable versus identifier" discussion, with repeated
> references to C / C++, to be somewhat on the confusing side.
>
> My view is "variable as container" makes sense if you're talking about the
> object itself, on the heap, e.g. the list, dict or tuple or whatever.
>
> I might write the word "Object" with a big "O" and say that represents "a
> container in memory" (contains data and methods e.g. datetime.datetime
> objects).
>
> But then I'd say said object is "variable" only if it's mutable i.e. it
> could be a constant (immutable) in contrast.  Strings and integers are not
> "variables" as you can't do anything to mutate them.  Lists are variables,
> strings are not.
>
> Names, on the other hand, are like postits or luggage tags, more like
> labels for objects, and we can pull a postit (like X) from an object (like
> 'A') and stick it on another object (say 3) instead.
>
> This is *not* a matter of a variable changing i.e.
>
> X = 'A'
> X = 3
>
> has nothing to do with "changing the content of a container" (as if 3 had
> to fit into the same piece of memory as the 'A' did) but is rather about
> slapping the name 'X' onto two different objects in quick succession.
> Identifiers don't care what they stick to, as long as they're objects.
>
> Objects always have type.
>
> Names are just names:  they name things with type, i.e. objects.
>
> It's not that mysterious -- but the "container" metaphor gets in the way
> when you go:
>
> >>> A = [1,2,3]
> >>> B = A
> >>> B[-1]=4
> >>> A[2]
> 4
>
> and then maybe think A should be pictured as a container with [1,2,3]
> inside it.  So does B have [1,2,3] inside it too, meaning it's own copy?
> Of course not, but two "containers" cannot logically "contain" the same
> object which is why there's cognitive stress.  The "container" metaphor is
> obstructive.
>
> B and A are simply two postits, two tags, affixed to the same object, the
> list on the heap, no big deal.
>
> You can call that object a "variable" if you like, but why not just call
> it a "mutable object" instead?
>
> On the other hand, A and B are just names in the namespace.  We use them
> to talk to / remotely control said objects, not just name them.  Names
> don't have type and we don't name names, we name objects.
>
> A name is a lot like a TV remote, with lots of buttons (dot notation
> activated, lots of little callables).  An object is a lot like the TV.
>
> More than one remote controlling the same TV is OK in Python.
>
> There is no "container" in this picture unless you want to say the TV is a
> container (an object), in which case I'd agree.  Saying the remote
> "contains" the TV is not helpful and just gets in the way the second you
> have two remotes for the same object.
>
> Kirby
>
>
>
> _______________________________________________
> Edu-sig mailing list
> Edu-sig@python.org
> https://mail.python.org/mailman/listinfo/edu-sig
>
>


-- 
Naomi Ceder
https://plus.google.com/u/0/111396744045017339164/about
_______________________________________________
Edu-sig mailing list
Edu-sig@python.org
https://mail.python.org/mailman/listinfo/edu-sig

Reply via email to