custom event problem with simplified example code

This is a more simplified version of the app that reproduces the behavior
I was seeing. Here there is only one panel. Right Click the panel and you
see in the log the event address is the same every time, and it's member
grows with each click.

Still perplexed. Can anyone shed some light on this?

Thanks,
Tim

p.s. also I apologize for the long lines in the code in my last post.
This one should works better.

import wx

import exceptions
import gc
import logging
import os.path
import sys
import threading
import traceback
import types

logging.basicConfig(format="%(asctime)s.%(msecs)03d " +
                    "%(module)s.%(lineno)s.%(funcName)s: " +
                    "%(message)s",
                    #datefmt="%Y-%m-%d %H:%M:%S")
                    datefmt="%H:%M:%S")
logger = logging.getLogger("MyLogger")
logger.setLevel(logging.DEBUG)

# Create a new event type and event binder for it.
myEVT_CUSTOM_CONTEXT_MENU = wx.NewEventType()
EVT_CUSTOM_CONTEXT_MENU = wx.PyEventBinder(myEVT_CUSTOM_CONTEXT_MENU, 1)

class CustomContextMenuEvent(wx.PyCommandEvent):
    def __init__(self, id, pos, menu_item_list=[]):
        wx.PyCommandEvent.__init__(self, myEVT_CUSTOM_CONTEXT_MENU, id)
        self.pos = pos
        self.menu_item_list = menu_item_list
        
    def __str__(self):
        return "address=0x%X, event id=%d, menu_item_list=%s" % \
               (id(self), self.GetId(), str(self.menu_item_list))
    
    def AppendMenuItem(self, menu_item):
        self.menu_item_list.append(menu_item)

class ContextMenuPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        """Binds wx.EVT_CONTEXT_MENU for source=self, and
        EVT_CUSTOM_CONTEXT_MENU for all sources."""
        wx.Panel.__init__(self, *args, **kwargs)
        self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu, self)
        self.Bind(EVT_CUSTOM_CONTEXT_MENU, self.OnCustomContextMenu)
    
    def OnContextMenu(self, event):
        """Creates and processes a CustomContextMenuEvent."""
        logger.debug("Received %s." % (event))
        new_event = CustomContextMenuEvent(self.GetId(),
                                           event.GetPosition())
        logger.debug("Created %s." % (new_event))
        self.GetEventHandler().ProcessEvent(new_event)
        # Do not skip main event. new_event will propagate up parent tree
        logger.debug("event references = %d, referrers = %s" %
                     (sys.getrefcount(event), gc.get_referrers(event)))

    def OnCustomContextMenu(self, event):
        logger.debug("Received event (%s). Skipping event..." % event)
        event.Skip()
        logger.debug("event references = %d, referrers = %s" %
                     (sys.getrefcount(event), gc.get_referrers(event)))
        
class WhitePanel(ContextMenuPanel):
    def __init__(self, parent, size=(400, 400)):
        ContextMenuPanel.__init__(self, parent, wx.ID_ANY)
        self.SetBackgroundColour(wx.NamedColour("WHITE"))
        
    def OnCustomContextMenu(self, event):
        event.AppendMenuItem("White")
        logger.debug("Appended 'White' to event menu items. event=%s" % \
                     event)
        logger.debug("event references = %d, referrers = %s" %
                     (sys.getrefcount(event), gc.get_referrers(event)))

class MyApp(wx.App):
    """ """
    def __init__(self):
        wx.App.__init__(self, redirect=False)
        
    def OnInit(self):
        self.frame = wx.Frame(None)
        self.window = WhitePanel(self.frame)
        self.frame.Show(1)
        self.SetTopWindow(self.frame)
        return True

if __name__ == '__main__':
    try:
        app = MyApp()
        app.MainLoop()
    except exceptions.StandardError, e:
        traceback.print_exc()
        raw_input()