Пытаюсь описать одну хитрую вложенную структуру. Для этого я создаю объект, одним из параметров которого является словарь, в значениях которого лежат экземпляры другого класса. И каким-то образом все параметры этих вложенных объектов ссылаются на одни и те же данные.
Немного кода.
Это "родительский" класс со словарём. Проверяем пустой словарь на заданный ключ, если не находим - создаём туда новый экземпляр. Если находим, вызываем метод вложенного объекта (он описан ниже).
class SomeClass:
param = {}
def add(self, data, value):
if data not in self.param.keys():
self.param[data] = SubClass()
self.param[data].add(value)
Вот вложенный класс. Он хранит в себе множество, куда добавляет новые значения.
class SubClass:
calls = set()
def add(self,data):
self.calls.add(data)
Потом заполняем кое-какими данными эту структуру.
>>> o = SomeClass()
>>> o.add('c', 1)
>>> o.add('c', 4)
>>> o.add('q', 2)
>>> o.add('q', 200)
>>> o.add('q', 19)
>>> o.add('a', 191)
А теперь проверяем, что же у нас внутри. Словарь содержит указатели на разные экземпляры класса.
>>> o.param
{'a': <__main__.SubClass at 0x7f24401077b8>,
'c': <__main__.SubClass at 0x7f24401076a0>,
'q': <__main__.SubClass at 0x7f2440107710>}
Но при этом в параметрах разных экземпляров хранятся одни те же данные.
>>> o.param['a'].calls
{1, 2, 4, 12, 16, 17, 19, 191, 200}
>>> o.param['c'].calls
{1, 2, 4, 12, 16, 17, 19, 191, 200}
>>> o.param['q'].calls
{1, 2, 4, 12, 16, 17, 19, 191, 200}
ЧЯДНТ?