Python学習ノート(七)—Python中isと=(is notと!=)の違い


転載は出典を明記してください.http://blog.csdn.net/sinat_1449739/articale/details/78311832本文はShawpooのコラムから来ました.
Python学习笔记(七)—Python中is和==(is not和!=)的区别_第1张图片
【Python学習ノートコラム】:http://blog.csdn.net/column/details/17658.html
Pythonには多くの演算子があります.ここでは主にis==の2つの演算子の違いを記録します.id()関数は、オブジェクトのメモリアドレスを確認するものです.各オブジェクトには対応するメモリアドレスがあります.
>>> id(1)
1543816880
>>> id("abc")
2880674151480
>>> id([1, 2, 3])
2880703493384
isは、2つの変数参照オブジェクトが同じかどうかを判断するために使用され、==は、参照変数の値が等しいかどうかを判断するために使用される.Javaのequal()と==に似ています.逆に、is notは、2つの変数が異なるオブジェクトから参照されているかどうかを判断するために用いられ、!=は、参照変数の値が異なるかどうかを判断するために用いられる.
具体的な例をいくつか紹介します.
  • 整数の比較:
  • x = 5
    y = 5
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    True
    1543817008
    1543817008
  • 文字列の比較:
  • x = "abc"
    y = "abc"
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    True
    2039623802136
    2039623802136
  • リストの比較:
  • x = [1, 2, 3]
    y = [1, 2, 3]
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    False
    2194144817928
    2194144817288
  • tupleの比較:
  • x = (1, 2, 3)
    y = (1, 2, 3)
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    False
    2699216284336
    2699216284480
  • dict(辞書)の比較:
  • x = {"id": 1, "name": "Tom", "age": 18}
    y = {"id": 1, "name": "Tom", "age": 18}
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    False
    3005783112296
    3005783112368
  • setの比較:
  • x = set([1, 2, 3])
    y = set([1, 2, 3])
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    False
    2206005855176
    2206006414696
  • 割当後比較(すべてのデータタイプに適合)し、リストを例として:
  • x = [1, 2, 3]
    y = x
    print(x == y)
    print(x is y)
    print(id(x))
    print(id(y))
    
        :
    True
    True
    2539215778568
    2539215778568 
    締め括りをつける
    上記の例では、2つの演算子の比較結果とメモリアドレスをそれぞれ印刷したので、次のようにすることができます.
  • 各オブジェクトの値が同じであれば、x==yの値は必ずTrueとなります.
  • オブジェクトのタイプが整数または文字列で値が同じであれば、x==yとx isyの値はTrueである.(テストされた浮動小数点型の数値は、正浮動小数点のみがこの法則に合致し、負浮動小数点数は一致しない);
  • list、tuple、dict、setの値が同じなら、x is yはFalseです.
  • x==yとx!=yの値は反対で、x is yはx is not yの値と反対です.
  • 以上の結論は、変数の直接割当または変数相互割当値の比較に対してのみ、2つの変数の間でコピーして比較していません.
    後はPythonの中の浅いコピーで和深のコピーを補充します.(更新されました.Pythonの割当値、浅いコピー和深コピー(図を含む)
    その他の読書
    Pythonの演算子