2016-10-01 14 views
3

私はPython is==演算子で遊んでいました。私が知る限り、演算子は2つのオブジェクトが同じidを持っているかどうかを調べますが、私の場合、2つの部分文字列が同じidを持っていても演算子はFalseを返します。ここで は、同じIDを使用する文字列でFalseを返します

はコードです:

#! /usr/bin/python3 
# coding=utf-8 
string = "HelloWorld" 

print(id(string)) #140131089280176 
print(id(string[0:5])) #140131089251048 
print(id(string[-10:-5])) #140131089251048 


print(string[0:5] == string[-10:-5]) #True 
print(string[0:5] is string[-10:-5]) #False 

サブストリングは、予想通り、元の文字列と同じIDを持っていないが、なぜオペレータは、同じIDを持つ2つのストリングとfalseを返すのですか?私の両方について

+4

は、私は(あなたが一度に2つのスライスを作成するときにそれを行うことができない、Pythonは最初の例にメモリ内の同じスロットを再利用していると思いたい

#または割り当てた場合はすぐに参照解除されませんでした)。 – jonrsharpe

答えて

0

print(id(string[0:5])) 
print(id(string[-10:-5])) 

が異なるIDを持っている、そのように、これらの答え:彼らは期待されるべきである

print(string[0:5] == string[-10:-5]) #True 
print(string[0:5] is string[-10:-5]) #False 

があります。

ここで間違いはありませんでしたか?私はコメントとしてあることを投稿するだろうが、カントまだ

+0

私はもう一度やりました。彼らはどちらも同じIDを持っています。両方の部分文字列(文字列[0:5]と文字列[-10:-5])は、この場合は同じ文字列リテラル "Hello"を指す必要があります。 – opwid

関連する問題