Расширенное использование
В этом шаге мы исследуем некоторые аспекты расширенного использования оператора is
.
- Определите класс
MyClass
с атрибутом value
.
class MyClass:
def __init__(self, value):
self.value = value
- Определите два экземпляра класса
MyClass
, obj1
и obj2
, с одинаковым значением value
.
obj1 = MyClass("Hello")
obj2 = MyClass("Hello")
- Выведите адрес в памяти
obj1.value
и obj2.value
с использованием функции id()
.
print(id(obj1.value))
print(id(obj2.value))
- Используйте оператор
is
, чтобы проверить, ссылаются ли obj1.value
и obj2.value
на один и тот же объект.
print(obj1.value is obj2.value)
Результат выполнения кода выше должен быть True
, так как атрибут value
является неизменяемым объектом, и оба экземпляра используют один и тот же объект в памяти.
- Теперь определите два экземпляра класса
MyClass
, obj3
и obj4
, с изменяемым объектом в качестве значения value
.
obj3 = MyClass([])
obj4 = MyClass([])
- Выведите адрес в памяти
obj3.value
и obj4.value
с использованием функции id()
.
print(id(obj3.value))
print(id(obj4.value))
- Используйте оператор
is
, чтобы проверить, ссылаются ли obj3.value
и obj4.value
на один и тот же объект.
print(obj3.value is obj4.value)
Результат выполнения кода выше должен быть False
, так как атрибут value
является изменяемым объектом, и оба экземпляра не используют один и тот же объект в памяти.