Simple Python variable scope
Question: It seems to me that functions can reference variables outside of their scope
but cannot set them. Is this correct? Am I understanding this right?

I also included the globals usage. I know they are bad ju-ju and will avoid
them; I know how to get around this, but just wanted to be clear.

My example program:

    
    
    import foo
    
    # beginning of functions
    
    # this one works because I look at the variable but dont modify it
    def do_something_working:
    
        if flag_to_do_something:
              print "I did it"
    
    # this one does not work because I modify the var
    def do_something_not_working:
    
        if flag_to_do_something:
              print "I did it"
              flag_to_do_something = 0
    
    # this one works, but if I do this God kills a kitten
    def do_something_using_globals_working_bad_ju_ju:
    
        global flag_to_do_something
    
        if flag_to_do_something:
             print "I did it"
             flag_to_do_something = 0
    
    
    # end of functions
    
    flag_to_do_something = 1
    
    do_something_working()
    do_something_not_working()
    do_something_using_globals_working_bad_ju_ju()
    


Answer: Correct. Well mostly. When you `flag_to_do_something = 0` you are not
modifying the variable, you are creating a new variable. The
`flag_to_do_something` that is created in the function will be a separate link
to (in this case) the same object. However, if you had used a function or
operator that modified the variable in place, then the code would have worked.

Example:

    
    
    g = [1,2,3]
    def a():
        g = [1,2]
    a()
    print g #outputs [1,2,3]
    
    g = [1,2,3]
    def b():
        g.remove(3)
    b()
    print g #outputs [1,2]
    

