Pass by reference?

Shae Erisson shapr at
Thu May 25 05:51:08 EDT 2000

Dale Strickland-Clark wrote:
> There isn't much else that's relevant around this statement.
> DBCon is an ADO connection object. This statement deletes some rows in a
> database and should return the number deleted in delcnt - the second
> argument. However, delcnt is always zero regardless of actual count deleted.
>     delcnt = 0
>     print DBCon.Execute("delete from parts where path='%s' and drive='%s'" %
> (path, drive), delcnt, 1)
>     print delcnt
> However, I stuck a print statement on the front to see what was returned and
> found a list of two items, the second of which is the count I want - but why
> isn't it returned where it should be?

I don't know what code/module etc you're using, but Python's roots are a
bit more towards functional languages than some other languages, that
means that often a call will return its output rather than assigning it
to a status variable you've passed into it.

You may want to try:
x = DBCon.Execute(stuff)
and then read from x to get your delcnt.

> Also the following program proves to me that arguments are passed by value
> and not by reference:
> def wibble(var):
>     var = 1
> x = 0
> wibble(x)
> print x
> It prints 0 showing that the assignment in wibble is made to a copy of x
> So - how do I pass a variable to a function/subroutine/method by reference?

try this:
def wibble(var):
    print 'var value before is', var
    print 'do var and x have exactly the same address in memory?',x is
    var = 2
    print 'var value after is', var
    print 'do var and x have exactly the same address in memory?',x is

x = 0
print x

what this means is that you're making a new reference named var inside
the function, rather than changing the variable in the scope 'above' the
sHae mAtijs eRisson (sHae at wEbwitchEs.coM) gEnius fOr hIre
   bRing mE fIve sQuirrels aNd nO oNe wIll gEt hUrt
13:00pm up 1 season, 1 squirrel, load average: 1+1j 0.5+2j 0.2+0.5j

More information about the Python-list mailing list