高度な使い方
このステップでは、is
演算子のいくつかの高度な使い方を探ります。
- 属性
value
を持つ MyClass
クラスを定義します。
class MyClass:
def __init__(self, value):
self.value = value
- 同じ
value
を持つ MyClass
クラスの 2 つのインスタンス obj1
と obj2
を定義します。
obj1 = MyClass("Hello")
obj2 = MyClass("Hello")
id()
関数を使って obj1.value
と obj2.value
のメモリアドレスを表示します。
print(id(obj1.value))
print(id(obj2.value))
is
演算子を使って obj1.value
と obj2.value
が同じオブジェクトを参照しているかどうかを確認します。
print(obj1.value is obj2.value)
上記のコードの出力は True
になるはずです。なぜなら、value
属性は不変オブジェクトであり、両インスタンスはメモリ内で同じオブジェクトを共有しているからです。
- 次に、可変オブジェクトを
value
として持つ MyClass
クラスの 2 つのインスタンス obj3
と obj4
を定義します。
obj3 = MyClass([])
obj4 = MyClass([])
id()
関数を使って obj3.value
と obj4.value
のメモリアドレスを表示します。
print(id(obj3.value))
print(id(obj4.value))
is
演算子を使って obj3.value
と obj4.value
が同じオブジェクトを参照しているかどうかを確認します。
print(obj3.value is obj4.value)
上記のコードの出力は False
になるはずです。なぜなら、value
属性は可変オブジェクトであり、両インスタンスはメモリ内で同じオブジェクトを共有していないからです。