On 12/09/2015 06:42, Random832 wrote:
Ben Finney <ben+pyt...@benfinney.id.au> writes:
The reference value is inaccessible to the program, it can only be used
to get at the referenced object.

That's like saying an integer is inaccessible since it can only be used
to add/subtract/etc (list of all operations you can do with an
integer). What does it mean to access something, if not to do some
operation on it? Getting the referenced object is the operation you can
do with it.

So in Python, we don't have pointers because we don't have access to
change or reassign them.

Yes you do. That's _exactly what happens_ in an assignment statement -
you are reassigning it to the address of another object. And that's
something you *can't do* with references in C++.

The operation you describe doesn't change the reference; it doesn't
mutate an existing value which can be compared with whatever value it
had before. Instead, it throws away one reference and replaces it with a
different one.

So, if you have a list x, and assign a new value to x[0], it doesn't
change the list, because you can't compare the list to the value the
list had before?

x still refers to a object which in this case happens to be a list. You've merely changed the value of the first element of the object that is referred to by the name x.


You're not making any sense. It's a value. Changing it and "throwing
away and replacing with a different one" are the same thing.

That's significant, because unlike a mutable value you can never again
get at the old reference in the Python program.

I don't understand what you mean by "can never again get at" it if you
think you _can_ do it for mutable values.

You can't, for example, keep the old reference (there are no references
to references in Python), because they're not accessible as values in
themselves. Once you assign a different reference, the old one is gone
and can't be found again.

You can keep it by copying it to somewhere.

How do you propose to “copy” a reference in Python? Making a new
reference to the referenced object is not making a copy of the
reference.

Yes it is. I don't know why you think it's not, so I can't even figure
out how to respond to this.


No it isn't. When you make a copy of an object you will end up with two names that refer to the same object.

>>> x = [1,2,3]
>>> y = x
>>> x;y
[1, 2, 3]
[1, 2, 3]
>>> del x
>>> y
[1, 2, 3]

If y was a copy of x, then when x is blown away how can y still know about the list that x originally referred to?

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to