2015-12-14 2 views
0

Я определяю словарь в классе (назовем его Thingy). Иногда мне нужно использовать другие экземпляры Thingy как ключи в словаре для thing1. Однако, если я попытаюсь добавить вещь2 в качестве ключа со значением 1 (скажем) в словарь вещи1, то вещь2: 1 также появляется в dict of thing2!Поведение словаря Bizarre 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

Никогда не используйте изменяемые объекты в качестве параметров по умолчанию:

class Thingy: 
    def __init__(self, d={}): 
Смежные вопросы