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