Clarification on python intro

Edward Glowacki glowack2@msu.edu
Tue, 9 May 2000 10:54:06 -0400 (EDT)


Thanks for fixing the carriage returns, I was about to make some really
smart-ass comment about that code "clarifying" anything at all! ;)

-- 
Edward Glowacki			glowack2@msu.edu
Network Services		
Michigan State University	

On Tue, 9 May 2000, Alan Garrison wrote:

> For those at the meeting (or are currently learning python), there was 
> a little confusion on my part about calling functions with mutable 
> objects.  I wrote some test code to clarify what Tim brought up:
> 
> >>> # create three local lists (mutable objects) >>> loc1 = [1,2,3]>>>
> loc2 = ["a","b","c"]>>> loc3 = ["d","e","f"]>>> # create function to
> test mutability>>> def Dinsdale(arg1,arg2,arg3):...  arg1[0] = "99"  
> # first, change indexed value...  arg1 = ["spam", "SPAM", "SPAM!!!"] #
> second, create new list instance...  arg2 = [44,45,46] # first, create
> new list instance...  arg2[0] = 55 # second, change indexed value...  
> arg3 = "Assigning the argument to be a new type"...  >>>
> Dinsdale(loc1,loc2,loc3)  # call function with our locals>>> print
> loc1 # should have [0] index changed['99', 2, 3]>>> print loc2 #
> should not change['a', 'b', 'c']>>> print loc3 # should not
> change['d', 'e', 'f']>>>
> 
> As you can see, function Dinsdale was passed three lists (mutable), 
> but only loc1 was changed at all.  Note the order of the arg# 
> changes in the funciton.  If I change an indexed part of the list 
> first, it is changed outside the function.  If I give it a whole 
> new list (arg1 = ["spam", "SPAM", "SPAM!!!"]), or any other new 
> object type (arg3 = "Assigning the argument to be a new type"), 
> a new object is created in the function and the reference to the 
> loc# object is lost (within the function at least).  This is 
> basically what Ben explained, so the above code should hopefully 
> clarify things.
> 
> 
> 
> 
> _______________________________________________
> linux-user mailing list
> linux-user@egr.msu.edu
> http://www.egr.msu.edu/mailman/listinfo/linux-user
>