初歩的なことなのですが、global変数に関する問題です。

from PySide import QtGui
import sys

class GlobalTest(QtGui.QTextEdit):
    def __init__(self,parent=None):
        super(GlobalTest,self).__init__(parent=None)

    def closeEvent(self,event):
        if g_is_modified == True:
            message = QtGui.QMessageBox().warning(None,"Warning-警告","書き換えられた内容があります。このまま閉じてもよろしいですか?\n",QtGui.QMessageBox.Ok,QtGui.QMessageBox.Cancel)
            if message == QtGui.QMessageBox.Ok:
                pass
            else:
                return
        print(15,global_widget.parent() == self)
        return QtGui.QTextEdit.closeEvent(self,event)
    def focusInEvent(self,event):
        print("focus キタ")
        global g_is_modified
        g_is_modified = True
        global_widget.setParent(self)
        return QtGui.QTextEdit.focusInEvent(self,event)
def main():

    try:
        QtGui.QApplication([])
    except Exception as e:
        print(19,e)
    global g_is_modified
    g_is_modified = False
    global global_widget
    global_widget = QtGui.QWidget()
    glob = GlobalTest()
    glob.show()

    sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
    main()

main()関数内で、一度、global宣言をし、g_is_modified = Falseを入れ込んでいます。
この変数の値は、focusInEventに入った時に、上書きされるようにしています。
一方で、もう一つ、global宣言をし、次は、globalウィジェットをグローバル化しています。同様に、このウィジェットの親を、focusInEventに入った時にGlobalTestに設定しています。
 結果は、

15 True
16 True

で問題ありません。これは、解決後の問題です。(最初はなぜ上書きできないのだろうということが疑問でしたが、どちらでもglobal宣言をしたらOKでした。)
解決前は、focusInEvent内では、global宣言をしておりませんでした。

def focusInEvent(self,event):
    print("focus キタ")

    g_is_modified = True
    global_widget.setParent(self)
    return QtGui.QTextEdit.focusInEvent(self,event)

結果

15 False
16 True

g_is_modifiedの値は上書きされませんでした。

g_is_modifiedは、再度global宣言をしなければ値が上書きされることはありませんが、widgetは、一度global宣言をすれば、値が更新されました。この違いはなんでしょうか?単なる変数と、クラスの一メソッドなので、全くの別物のため、なんとなく理由はわかりますが、わかりやすく説明していただくことは出来ますか?