@Dasha_PROgrammer

Можно ли приравнять ссылки обоих объектов в ООП?

Есть класс и его 2 экземпляра.
Как проверить, что ссылки на эти 2 объекта различны и можно ли их сделать одинаковыми?
class Game:
    def __init__(self, player):
        self.player = player

    def sysout(self, position):
        print(f"{self.player} на {position} месте")


player1 = Game('петя')
player1.sysout(1)

player2 = Game('Вася')
player2.sysout(2)

print(id(player1), id(player2))
player1 = player2
print(id(player1), id(player2))
# после строки player1=player2 объекты стали равны, а ссылки на эти объекты остались прежними, то есть всё равно разные?
# как это проверить?
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
@kamenyuga
Что это за одинаковость, которую нужно получить и/или проверить?

В пайтоне переменные и объекты - это как ключи и значения словаря. Объекты непосредственно работают в коде, а переменные указывают на эти объекты и позволяют получить к ним доступ. На один объект могут ссылаться много переменных. Объекты сами могут ссылаться на другие объекты, например, список хранит ссылки на свое содержимое. И главное - объект живет, пока на него хоть кто-то ссылается, а когда ссылок становится 0, то объект уничтожается сборщиком мусора.

Так что в приведенном коде произошло следующее - изначально созданы 2 объекта (Петя и Вася), потом обе переменные стали указывать на Васю, а Петя был уничтожен. Остался только 1 объект и 2 ссылки на него.

Можно было вместо присваивания одного объекта обеим переменным, сделать в них значение self.player равным. Тогда это были бы два различных объекта с абсолютно одинаковым поведением - это кстати один из подходов к созданию синглтонов в питоне.

Для полного понимания того, что тут происходит можно почитать хороший учебник по питону, а затем уже подробнее погуглить про сборщик мусора.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы