scope, modyfing outside object from inside the method

Marcin Stępnicki mstepnicki at gmail.com
Wed Sep 26 09:39:22 EDT 2007


Dnia Mon, 24 Sep 2007 10:41:22 -0300, Ricardo Aráoz napisał(a):

> Would this work for you?

Thank you both for help. Well - yes and no :). It's getting more
interesting:

First, your code:

class myrow():
  def __init__(self, idict = {}):
        self.container = idict
  def __str__ (self):
        return self.container.__str__()

results = [
        {'a': 12, 'b' :30 },
        {'a': 13, 'b' :40 }
]

mystruct = []

for row in results:
    mystruct.append(myrow(row))

results[1]['b'] = 444

print results  # [{'a': 12, 'b': 30}, {'a': 13, 'b': 444}]

print mystruct # does not work ok , you should probably define
               # mystruct's __str__ method properly

# But, save for the __str__ thingy, the rest is ok.

for row in mystruct:
    print row

# {'a': 12, 'b': 30}
# {'a': 13, 'b': 444}

And now let's try to swap results with something else:

print id(results)

# new resultset 
results = [
        {'a': 112, 'b' : 130 },
        {'a': 113, 'b' : 140 }
]

print id(results)
for row in mystruct:
    print row

# {'a': 12, 'b': 30}
# {'a': 13, 'b': 444}

At first glance (before adding id()) it's a little bit weird. The original
object was supposedly "overwritten", but as one can see it has different
id then the new one. mystruct still holds references to old object,
though. I can handle it and just change original object, but I'm curious
if there's a way to "swap" them "on-the-fly".

Thanks one again.

-- 
| And Do What You Will be the challenge | http://apcoln.linuxpl.org
|    So be it in love that harms none   | http://biznes.linux.pl
|   For this is the only commandment.   | http://www.juanperon.info
`---*  JID: Aragorn_Vime at jabber.org *---' http://www.naszedzieci.org



More information about the Python-list mailing list