Please help with MemoryError
jjposner at optimum.net
Fri Feb 12 19:45:46 CET 2010
On 2/12/2010 12:14 PM, Steven D'Aprano wrote:
> On Fri, 12 Feb 2010 06:45:31 -0800, Jeremy wrote:
>> You also confirmed what I thought was true that all variables are passed
>> "by reference" so I don't need to worry about the data being copied
>> (unless I do that explicitly).
> No, but yes.
> No, variables are not passed by reference, but yes, you don't have to
> worry about them being copied.
> You have probably been mislead into thinking that there are only two
> calling conventions possible, "pass by value" and "pass by reference".
> That is incorrect. There are many different calling conventions, and
> different groups use the same names to mean radically different things.
> If a language passes variables by reference, you can write a "swap"
> function like this:
> def swap(a, b):
> a, b = b, a
> x = 1
> y = 2
> swap(x, y)
> assert (x == 2) and (y==1)
> But this does not work in Python, and cannot work without trickery. So
> Python absolutely is not "pass by reference".
> On the other hand, if a variable is passed by value, then a copy is made
> and you can do this:
> def append1(alist):
> alist.append(1) # modify the copy
> return alist
> x = 
> newlist = append1(x)
> assert x ==  # The old value still exists.
> But this also doesn't work in Python! So Python isn't "pass by value"
> What Python does is called "pass by sharing", or sometimes "pass by
> object reference". It is exactly the same as what (e.g.) Ruby and Java
> do, except that confusingly the Ruby people call it "pass by reference"
> and the Java people call it "pass by value", thus guaranteeing the
> maximum amount of confusion possible.
> More here:
Excellent writeup, Steve! You and Jeremy might be interested in a
message on "pass-by-XXX" from John Zelle, the author of the textbook
"Python Programming: An Introduction to Computer Science".  This was
part of a long thread in May 2008 on the Python edu-sig list -- nearly
as long as "Modifying Class Object", but with nowhere near the fireworks!
More information about the Python-list