All parameters are passed by reference (in the C++ sense). The Python language doesn't have pass by value (in the C++ sense) although it can be simulated by copying, and certain things are automatically copied on mutate like numbers, strings, and tuples such that they may give the appearance of having been passed by value. To be very specific python is call-by-object (aka call-by-sharing, call-by-object-reference) as pointed out herehere on stackoverflow previously.
To make a variable global you need to make the first assignment to it outside of any function or create in a function with the global keyword. To modify it in a function you'll also need to use the global keyword. See here for more details on the global keywordkeyword.
For example:
i = 0
print i
class A(object):
    global i
    i = 1
print i
class B(object):
    def Foo(self):
        global i
        i = 2
b = B()
b.Foo()
print i
yields output of:
0
1
2