Я использую экземпляры пользовательского класса (аналогично 2D-вектору с кучей лишних вещей, среди прочего) в качестве ключа dict.
Он использует собственный хэш и равен магическим методам, который в основном делает его равным кортежу с данными инициализации.python access dict key по ключевому слову
Набор данных, с которым я столкнулся, настолько велик, что память (ОЗУ) является основной проблемой, и мне нужны несколько разных структур данных с теми же экземплярами пользовательских объектов, что и ключи.
Я хочу получить доступ к фактической ссылке ключей dict.
Если я могу получить ключ-диктовку из кортежа данных инициализации, я могу предотвратить использование разных экземпляров пользовательского класса с одинаковыми внутренними данными в разных структурах данных и вместо этого использовать один и тот же экземпляр.
Возможно ли это? И если да, то как?
Пример:
dict1 = {}
dict2 = {}
Один сегмент кода:
v = MyVect(1,5,"data",True)
dict1[v] = ("important", "data")
Второй сегмент:
(. Эта часть имеет доступ только к данным, который был использован для создания MyVect
, но без фактической ссылки)
keydata_without_reference = (1,5,"data",True)
mykey = dict1.getkeyref(keydata_without_reference) # getkeyref somehow
dict2[mykey] = "some other data"
В результате I w ould экономит почти половину памяти.
Это просто настройка исходных структур данных, которые программа использует позже.
Ваши случайные изменения в терминах немного запутывают, но код помогает. Например, нет такой вещи, как «2D-вектор» (это матрица), и ваш код использует только простые 4-кортежи. – Prune
Теперь ... что мешает вам использовать один и тот же вектор для каждого из них (структура данных)?Словарь Python делает для вас собственное хеширование. – Prune
Я не знаю, как правильно это сформулировать, но похоже, что вы не понимаете, что я пытаюсь объяснить. Я имею в виду термин «вектор», не похожий на вектор C++, который более или менее переводится в список python (динамический массив), но как математический вектор, используемый в играх и т. Д. Это объект с данными, указывающий на уникальную точку в моделируемой среды. Так что, это просто куча данных, которые вы также можете представить в кортеже, но кортежи не могут представлять состояние с помощью методов и т. Д. –