に新しいオブジェクトを作成する場合PythonはY、すべての3つの名前xに対してメモリ内の同じ整数オブジェクトを使用してZPythonは次の例では、メモリ
def main():
x = 0
y = 0
z = 0
print(x,y,z)
print(x is y is z)
y = 2
print(x,y,z)
print(x is y)
print(z is y)
print(x is z)
if __name__ == "__main__":main()
出力:
0 0 0
True
0 2 0
False
False
True
なぜPythonが同じタプルオブジェクトを使用しないのですか(そうです、それは言語デザイナーの選択ですが、どうしてですか?)、質問するのがより簡単です。
def main():
a = 1, 2, 3
b = (1, 2, 3)
c = 1, 2, 3
print(type(a) == type(b))
print(a == b)
print(a is b)
print(a == c)
print(a is c)
if __name__ == "__main__":main()
出力:可変オブジェクトを表しリテラルについては
True
True
False
True
False
あなたの質問にコードの画像をダンプすることはできませんか?それはちょうど_pasting_のスターリングオプションが常にあります。 –
Pythonが新しいオブジェクトを作成するとき、実装依存です。実際には、文字列リテラルは再利用され、 'intern()'に渡された文字列は再利用され、小さな整数は再利用され、空のタプルは再利用されます。すべての不変オブジェクトを再利用することと、再利用可能な不変オブジェクトを追跡することとの間にはトレードオフがあります。 – kindall
@cᴏʟᴅsᴘᴇᴇᴅ:質問者は 'is'と' == 'の違いを知っています。問題は、タプルが異なるオブジェクトである理由、なぜ 'is'と' == 'が別のものを報告するのかという理由ではありません。 – user2357112