В Python, как известно, работа с переменными отличается от того же C. Существует ли хоть какая-нибудь возможность сделать, грубо говоря, ссылку на переменную, содержащую иммутабельный объект? Или только оборачивать его в мутабельный и ссылаться на него?
Приведу пример для наглядности. Допустим, реализовываем двоичное дерево. Это можно сделать по-разному, но код взят такой, чтобы подходил под вопрос. Так что претензии вроде «Так никто не реализует двоичные деревья» не принимаются. В конструкторе имеем:
self.left = None
self.right = None
И если я захочу получить ссылку на одно из свойств (для добавления или поиска элемента) во избежание дублирования кода, то у меня ничего не выйдет:
branch = self.left if condition else self.right
Если мы branch присвоим какое-то значение, исходный объект это не затронет.
Будем считать, что иметь None на данном этапе там обязательно.
Можно, как уже писал выше, обернуть все это в мутабельный объект. Например, список, и работать с нулевым его элементом. Или специальный класс завести.
Можно обойти проблему, работая с ключами списка/словаря:
self.branches=[None, None]
...
branch = 0 if condition else 1
и обращаться к branches[branch].
Но если вдруг очень хочется решить задачу на основе первого примера, выкрутиться и нормально сослаться на self.left / self.right совсем никак нельзя? Только расписывать в ветках условного оператора одни и те же действия для разных ветвей?