from copy import deepcopy

class CppType( object ):
    
    def __init__(self, type_name):
        self.type_name = type_name
        
    def GetTypeName(self):
        return self.type_name

    def __getattr__(self, attr):
        if attr == 'type_name':
            return self.GetTypeName()
        
        raise AttributeError('%s is not a property or tag of %s' % (attr, self.GetTypeName()))
                         
    
class InfoHolder(object):
    found_m1_context = False

def MyTrace(frame, event, arg):
    if frame.f_code.co_name == 'm1':
        InfoHolder.found_m1_context = True
        
    return MyTrace
    
import sys
sys.settrace(MyTrace)
cpp_type = CppType('Foo')
cpp_type = deepcopy(cpp_type) #Why not making the deepcopy here makes it work??

def m1():
    print 'here'
m1()


assert InfoHolder.found_m1_context