01 Feb

How to modify a variable inside of function

Code example

class z():
    def __init__(self):
        self.z = ['foo']
        print 'before', self.z

    def zoo(self, doo):
        doo[0] = 'ya'

class b():
    def __init__(self):
        self.z = 'foo'
        print 'before', self.z

    def zoo(self, doo):
        doo = 'ya'

A = z()
A.zoo(A.z)
print 'after', A.z

print

B = b()
B.zoo(B.z)
print 'after', B.z

Output

[dandelion@bart ~]$ python z.py
before ['foo']
after ['ya']

before foo
after foo
[dandelion@bart ~]$

Explanation

It’s simple. In Python ‘string’ is immutable object, while [list] is mutable one.