示例#1
0
def test_data():
    
    # the SUAVE Data class...
    data = Data()
    
    # item-style assignment
    data['key1'] = 'iterm1'
    data['key2'] = 'borkaloo'
    
    # attribute-style assignment
    data.key3 = ['magic','majic','majik']
    data.key4 = MyData()
    
    # adding a branch
    data.key5 = Data()
    data.key5.key_a = 2
    
    # index based access
    print data[0]
    print data.values()[0] # an equivalent syntax
    
    print ""
    
    # iteration, equivalent syntax
    for i in range( len(data) ):
        print data[i]
    for value in data.values():
        print value
    for i,value in enumerate( data.values() ):
        print value
        
    print ""
        
    # very pythonic key-value iteration (!!!)
    for key,value in data.iteritems():
        print key,": ",value
    
    print ""
        
    # check if data has a key
    if data.has_key('key1'):
        print 'i haz key1!'
        
    print ""
    
    # check if data is a certain type
    if isinstance(data,MyData):
        print "this won't print"
    elif isinstance(data.key4,MyData):
        print 'data.key4 is of type MyData!'
    
    print ""
        
    # an example of deep vs reference copy
    refer = data
    deep  = deepcopy(data)
    
    print data.key1
    refer.key1 = 'new_value!!'
    print data.key1
    deep.key1 = "won't change data"
    print data.key1
    
    # the relevent case of the deepcopy example is when receiving input
    # to a method.  the input will be a reference copy, and if you don't 
    # want changes made to the data to propogate back to the referenced
    # object, you must deepcopy it.
    
    print ""
    
    return