devserver: eliminate mutable default arguments

Fixes a potential error due to Python's declaration-time binding of
default arguments. In essence, the rule of thumb is not to use default
values that are mutable objects.

BUG=None
TEST=Unittests; devserver starts and runs

Change-Id: Ib5a45f2f500c6d73eb94d0342f834a90097cb058
Reviewed-on: https://gerrit.chromium.org/gerrit/35416
Reviewed-by: Chris Sosa <sosa@chromium.org>
Commit-Ready: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
diff --git a/devserver.py b/devserver.py
index 711611b..1f3320f 100755
--- a/devserver.py
+++ b/devserver.py
@@ -187,7 +187,7 @@
   return hasattr(name, 'exposed') and name.exposed
 
 
-def _GetExposedMethod(root, nested_member, ignored=[]):
+def _GetExposedMethod(root, nested_member, ignored=None):
   """Returns a CherryPy-exposed method, if such exists.
 
   Args:
@@ -199,13 +199,13 @@
     the |root| object, if the function is exposed and not ignored; None
     otherwise.
   """
-  method = (nested_member not in ignored and
+  method = (not (ignored and nested_member in ignored) and
             _GetRecursiveMemberObject(root, nested_member.split('/')))
   if (method and type(method) == types.FunctionType and _IsExposed(method)):
     return method
 
 
-def _FindExposedMethods(root, prefix, unlisted=[]):
+def _FindExposedMethods(root, prefix, unlisted=None):
   """Finds exposed CherryPy methods.
 
   Args:
@@ -218,7 +218,7 @@
   method_list = []
   for member in sorted(root.__class__.__dict__.keys()):
     prefixed_member = prefix + '/' + member if prefix else member
-    if prefixed_member in unlisted:
+    if unlisted and prefixed_member in unlisted:
       continue
     member_obj = root.__class__.__dict__[member]
     if _IsExposed(member_obj):