learning python ...
Christian Gollwitzer
auriocus at gmx.de
Thu May 27 17:13:37 EDT 2021
Am 25.05.21 um 06:08 schrieb hw:
> On 5/25/21 12:37 AM, Greg Ewing wrote:
>> Python does have references to *objects*. All objects live on
>> the heap and are kept alive as long as there is at least one
>> reference to them.
>>
>> If you rebind a name, and it held the last reference to an
>> object, there is no way to get that object back.
>
> Are all names references? When I pass a name as a parameter to a
> function, does the object the name is referring to, when altered by the
> function, still appear altered after the function has returned? I
> wouldn't expect that ...
>
Yes, it does. It is a common pitfall for newbie Python programmers.
def f(a):
a.append(2)
l=[1, 2, 3]
f(l)
print(l)
==> [1, 2, 3, 2]
The strange thing, coming from a different language, is the apparent
difference, if instead of a list, you pass an integer:
def f(a):
a=5
l=3
f(l)
print(l)
====> 3
Here, the "l" is not changed. The reason is that the statement "a=5"
does NOT modify the object in a, but instead creates a new one and binds
it to a. l still points to the old one. Whereas a.append() tells the
object pointed to by a to change.
Christian
More information about the Python-list
mailing list