回答:
それは何is:用でx is y戻っTrueた場合xとy同じオブジェクトです。
x is zは、を返しますFalse。ただし、xとzにリストではなく同じ値が割り当てられている場合(たとえばx, z = 13, 13)はをx is z返しますTrue。何故ですか?
is2つの名前が同じメモリ位置を参照しているかどうかを確認します。オブジェクト自体とは関係ありません。等しいが同じ場所に格納されていない、たとえば''a'*10000 is 'a' * 10000False である文字列のような変更不可能なオブジェクトを持つのは簡単です。
"af" is "af"か() is ()わかりませんか...なぜ彼らは同じメモリ位置を共有するのですか?
2つの正解ながらx is zとid(x) == id(z)、既に掲載されている、私は、Pythonの実装の詳細を指摘したいと思います。Pythonは整数をオブジェクトとして保存します。最適化として、開始時に一連の小さな整数(-5〜256)を生成し、小さな値を持つ整数を保持するすべての変数がこれらの事前初期化オブジェクトを指すようにします。より詳しい情報
2つのオブジェクトが同じ(trueを返すであろうする場合、整数をチェック同じ少数(-5〜256)に初期化オブジェクトことをこれは意味上のC-Pyhon限り、私はこれは承知のように、実装の詳細大きいためながら、)数値は、一方のオブジェクトが他方から初期化されている場合にのみtrueを返します。
> i = 13
> j = 13
> i is j
True
> a = 280
> b = 280
> a is b
False
> a = b
> a
280
> a is b
True
id()を使用して、各変数名が参照する一意のオブジェクトを確認することもできます。
In [1]: x1, x2 = 'foo', 'foo'
In [2]: x1 == x2
Out[2]: True
In [3]: id(x1), id(x2)
Out[3]: (4509849040, 4509849040)
In [4]: x2 = 'foobar'[0:3]
In [5]: x2
Out[5]: 'foo'
In [6]: x1 == x2
Out[6]: True
In [7]: x1 is x2
Out[7]: False
In [8]: id(x1), id(x2)
Out[8]: (4509849040, 4526514944)
私は本当に視覚的なフィードバックが欲しいので、時々http://www.pythontutor.com/visualize.html#mode=editを開いて、メモリがどのように割り当てられ、何が何を参照しているかを確認します。
この返信は視覚化についてなので、この素晴らしいgifを追加しました。
これはdocs.python.orgによるものです:「すべてのオブジェクトにはID、タイプ、値があります。オブジェクトのIDは、一度作成されると変更されることはありません。メモリ内のオブジェクトのアドレスと考えることができます。'is '演算子2つのオブジェクトのIDを比較します; id()関数はそのIDを表す整数を返します。
どうやら値を変更するたびに、IDの変更によって示されるようにオブジェクトが再作成されます。行x = 3の後に行x = 3.14が続くと、エラーは発生せず、xのID、タイプ、および値が異なります。