Извините за смутное название, я не совсем понял, как его произнести:
Допустим, у нас есть класс, и он содержит словари, встроенные в больший словарь.
class AnObject(object):
grail = {'Grail' : '', 'Quest' : ''}
spam = {'More spam' : '', 'Less spam' : ''}
parrot = {'More parrot' : '', 'Less parrot' : '', 'Grail' : grail}
egg = {'Spam' : spam, 'Parrot' : parrot }
Затем мы хотим назвать эти атрибуты другими именами
self.egg = egg
self.parrot = egg['Parrot']
self.moreparrot = self.parrot['More parrot']
Это приведет к правильному расположению, но по какой-то причине я нахожу ...
>>>knight = AnObject()
>>>knight.moreparrot = x
>>>knight.moreparrot
x
>>>knight.egg
{'Parrot' : {'More parrot' : '', 'Less parrot' : ''}...}
Но это прекрасно работает:
>>>knight.egg['Parrot']['More parrot'] = x
>>>knight.egg['Parrot']['More parrot']
x
>>>knight.egg
{'Parrot' : {'More parrot' : '', 'Less parrot' : ''}...}
Они должны указывать на одну и ту же переменную, но я получаю разные результаты.Как получилось?
Редактировать:
Это может быть совершенно случайным, но по какой-то причине спам непротиворечив.
self.egg = egg
self.spam = egg['Spam']
self.morespam = self.spam['More spam']
>>>knight = AnObject()
>>>knight.morespam = x
>>>knight.morespam
x
>>>knight.egg['Spam']['More spam']
x
>>>knight.egg
{'Spam' : {'More spam' : 'x', 'Less spam' : ''}...}