web-dev-qa-db-ja.com

2つの変数がPythonで同じオブジェクトを参照しているかどうかを確認するにはどうすればよいですか?

xとyは2つの変数です。
_x == y_を使用してそれらが等しいかどうかを確認できますが、同じIDを持っているかどうかを確認するにはどうすればよいですか?

例:

_x = [1, 2, 3]
y = [1, 2, 3]
_

Xとyが等しいため、_x == y_はTrueになりますが、xとyは同じオブジェクトではありません。
sameObject(x, y)のようなものを探しています。その場合はFalseであると思われます。

44
snakile

isを使用して、2つのオブジェクトが同じIDを持っているかどうかを確認できます。

>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x == y
True
>>> x is y
False
62
Mark Byers

Mark Byersからの回答に基づいて構築するには:

IDを区別するためのis評価は、変数にプリミティブ型ではなくオブジェクトが含まれている場合に機能します。

_object_one = ['d']
object_two = ['d']
assert object_one is object_two  # False - what you want to happen

primitive_one = 'd'
primitive_two = 'd'
assert primitive_one is primitive_two  # True - what you don't want to happen
_

プリミティブも比較する必要がある場合は、組み込みのid()関数を使用することをお勧めします。
Python docs から:

オブジェクトの「アイデンティティ」を返します。これは、その存続期間中、このオブジェクトに対して一意で一定であることが保証されている整数です。

だからそれはこれになります:

_assert id(primitive_one) == id(primitive_two)  # False
_
5
Barm