Pythonにおけるisと=および文字列の滞留メカニズムについて詳細に説明する。


isと==
まず、公式文書のisと==に関する概念を理解してください。isは対象標示子であり、==は等しい(equality)を表します。isの役割は、オブジェクトのラベルが一致しているかどうかを確認することです。つまり、2つのオブジェクトのメモリのアドレスが同じかどうかを比較することです。(id(a)=id(b)を確認することに相当します。==は、2つのオブジェクトの参照の値が等しいかを確認するために使用されます。この点はJavaと似ていますが、Javaでは==を使って二つのオブジェクトのメモリ中のアドレスを比較し、equals()を使って両者の間の値が等しいかどうかを確認します。
is
==
概念
オブジェクトラベル
五分五分
作用
オブジェクトのメモリ内のアドレスを比較します。
2つのオブジェクトの参照値をチェックします。

id(a)=id(b)
a.eq(b)
文字列の常駐メカニズム
Pythonの文字列はintern機構を採用しています。同じ値の文字列が必要な場合(識別子など)、文字列池から直接に使用できます。頻繁な作成と破壊を避け、効率を高め、メモリを節約しますので、文字列をつなぎ合わせたり修正したりするのは性能に影響します。
可変ではないので、文字列の操作はすべてreplaceではなく、新しいオブジェクトを作るのです。これもなぜ多くの文字列をつなぎ合わせる時に+でjin()、join()を使うことを勧めないのですか?
注意したいのは、すべての文字列がintern方式を採用しているわけではなく、下線、数字、文字列のみが含まれる場合にのみinternが使用される。
関連例
例1

a = "hello"
b = "hello"
print(a is b) #    True 
print(a == b) #    True
同じ値の単純文字列オブジェクトは文字列池に1つだけ保存されます。文字列は可変オブジェクトでなければならないので、aとbは同じオブジェクトです。
例2

a = "hello world"
b = "hello world"
print(a is b) #    False
print(a == b) #    True 
aとbにはスペースがありますので、intern(スペースはpython識別子ではありません)はありませんので、aとbは同じオブジェクトではありません。これはインタラクティブコマンドラインでのみ実行され、PyCharmまたはファイルとして保存されていますが、結果は異なります。
例3

a = 'ab' + 'c' is 'abc'
print(a) #    True
ab = 'ab'
b = ab + 'c' is 'abc'
print(b) #    False
最初の'ab'+'c'はcomple-timeで値を求めています。'abc'に置き換えられました。だから出力はTrueです。第二の例では、ab+'c'はrun-time(運転期間)でつなぎ合わせられていて、自動internによって引き起こされていない。
例4

a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) #    False
print(a == b) #    True 
aとbはリストで、同じオブジェクトではありません。
例5

a = [1, 2, 3]
b = a
print(a is b) #    True 
print(a == b) #    True
aの参照をbにコピーします。メモリでは同じオブジェクトを指します。
例6

a = ["I", "love", "Python"]
b = a[:]
print(a is b) #    False
print(a == b) #    True
print(a[0] is b[0]) #    True
print(a[0] == b[0]) #    True
bスライス操作によりオブジェクト(スライス割り当て)を再割り当てしたが、値はaと同じである。スライスコピーは浅いコピーですので、リストの要素は再作成されていませんので、a[0]is b[0]はTrueに出力されます。
例7

a = 1
b = 1
print(a is b) #    True
print(a == b) #    True
Pythonは比較的小さい整数のオブジェクトをキャッシュします。次回使う時はそのままキャッシュから取得します。
例8

a = 320
b = 320
print(a is b) #    False
print(a == b) #    True
Pythonは、すべての整数オブジェクトではなく、比較的小さい整数オブジェクトのみをキャッシュする。これはインタラクティブコマンドラインでのみ実行され、PyCharmまたはファイルとして保存されていますが、結果は異なります。
コントラスト
isは==と比較して計算速度が速くなります。これは重い荷物を運ぶことができないので、特殊な関数呼び出しを行わず、直接二つの整数idを比較することで、関数呼び出しのオーバーヘッドを低減します。a==bはa.eq(b)と同等であり、Objectからeqメソッドを継承するのも元々は2つのオブジェクトのidを比較した結果、isと同じであるが、Pythonオブジェクトの多くはObjectのeqメソッドを上書きし、コンテンツの関連比較を定義するので、比較は対象属性の値である。
変数と一例の値を比較する場合は、isを使用します。現在、isを一番よく使うところは、相手がNoneかどうかを判断する時です。以下はオススメの書き方です。Noneではないと判断するオススメの書き方は、xxx is not Noneです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。