Possible Duplicate:
“Least Astonishment” in Python: The Mutable Default Argument
I've created a Person class which has a name and a list of children. The children are of the same Person class. If I create two Person instances, and add a child to one of the person instances, it gets added to both Person instances. I would assume the child should only be added to the children of person1 and not to person2, but it gets added to both. I must be doing something obvious wrong, but I can't see it.
Similar questions showed people adding the variable definition to the class itself instead of the constructor, but that's not what's happening here. Any help would be much appreciated, it's frying my brain!
See below for code and output:
class Person(object):
def __init__(self, name, children=[]):
self.name = name
self.children = children
def __repr__(self):
return '<' + self.name + '>'
def add_child(self, child):
self.children.append(child)
def main():
person1 = Person('Person1')
person2 = Person('Person2')
person1.add_child(Person("Person 1's child"))
print "Person 1's children:", person1.children
print "Person 2's children:", person2.children
if __name__ == "__main__":
main()
output of this code is:
Person 1's children: [<Person 1's child>]
Person 2's children: [<Person 1's child>]