使用对象作为键的奇怪的Python字典行为

时间:2015-12-14 22:33:30

标签: python python-2.7 dictionary

我在课堂上定义字典(让我们称之为Thingy)。有时我需要使用其他Thingy实例作为thing1字典中的键。但是,如果我尝试将thing2作为值1(例如)添加到thing1的字典中,那么thing2:1也会出现在thing2的字典中!

请确认您是否可以复制(python 2.7.6):

# class definition
class Thingy:
    def __init__(self, d={}):
        self.dict = d

# Test code
thing1 = Thingy()
thing2 = Thingy()
thing1.dict[thing2] = 1
print('Thing1.dict is {}'.format(thing1.dict))
print('Thing2.dict is {}'.format(thing2.dict))

给了我

Thing1.dict is {<__main__.Thingy instance at 0x7f79fdeed998>: 1}
Thing2.dict is {<__main__.Thingy instance at 0x7f79fdeed998>: 1}

即使我从未改变过Thing2.dict!

1 个答案:

答案 0 :(得分:1)

绝不使用可变对象作为默认参数:

class Thingy:
    def __init__(self, d={}):