def []=(*args)
      change_type = args[0] >= length ? :added : :modified
      changes = changes_for(change_type,:"[]=",*args)
      changing(change_type,:trigger=>:"[]=", :changes=>changes) {super}
    end
def []=(*args)
      change_type = args[0] >= length ? :added : :modified
      changes = changes_for(change_type,:"[]=",*args)
      changing(change_type,:trigger=>:"[]=", :changes=>changes) {super}
    end
[]= can either be an add method or a modifier method depending on
if the previous key exists