Bre*_*ers 2 python tuples immutability python-3.5
如果我没记错的话a is b应该返回Trueifa和b指向同一个对象。对于两个相等的列表,它会返回False,因为这两个列表是两个不同的列表。我认为不可变对象没有这个问题,但是当我输入时:
a = (1, 2, 3)
b = (1, 2, 3)
a is b #returns false
Run Code Online (Sandbox Code Playgroud)
我认为这应该返回True并a指向b具有相同值的不可变对象。为什么我使用元组时没有a指向同一个对象b?
您的 a 和 b 不指向同一个对象(您创建了两个单独的元组);您可以使用id(a)或 - 正如您所做的那样 - 使用进行检查a is b。
a == b
Run Code Online (Sandbox Code Playgroud)
另一方面将会True。
如果你希望它们指向同一个对象,你可以这样做
a = b = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
现在a is b是True。
这些都与可变性或不变性无关。list如果你用s 而不是s ,效果是一样的tuple。
您可以将您的代码pythontutor可视化以查看发生了什么。
Python确实会实习一些字符串和一些小整数(例如a=0; b=0; a is byields True),但并非所有不可变对象都会实习。此外,您不应该依赖它,而应将其视为实现细节。