1

文字列が通常の方法でメモリに残る場合、このケースをどのように説明しますか?

s1=';;'
s2=';;'
s1==s2,s1 is s2
(True, False)

s1=';'
s2=';'
s1==s2,s1 is s2
(True, True)
4

2 に答える 2

2

最初のケースでは、s1s2は等しい値を持ちますが、同じインスタンスではありません。

2 番目のケースではs1s2も同じ値を持ちますが、これらは単一文字の文字列であり、各文字それ自体と同じであるため、Python はこれを解釈して、文字が同じ文字であることを確認します。

Python がこれを行うのは、小さな数字と単一文字にキャッシュを使用するためです。

この質問、具体的にはこの回答の詳細を読むことができます。

于 2013-07-10T11:02:39.067 に答える
0

==演算子は、値が等しいかどうかをチェックします。

is両方のエンティティが同じメモリ位置を指しているかどうかを確認します。

ここで、エンティティが のように本質的に同じオブジェクトである場合、s1=s2=";;"Trues1 is s2になります。これは簡単に理解できます。

しかし、私たちは直感的に、別々に初期化された 2 つのエンティティは異なるメモリ位置を持つと考えています。しかし、それは必ずしも真実ではありません。

パフォーマンスを向上させるために、Python は、int (ある範囲の値の場合)、string (再びある範囲の場合) を作成するときに、既存のオブジェクトへの参照を返すだけです。

于 2013-07-10T11:27:37.230 に答える