在交互式python shell中尝试这个.
[] is [ ]
Run Code Online (Sandbox Code Playgroud)
以上返回False,为什么?
Mar*_*ers 14
您创建了两个可变对象,然后用于is查看它们是否是同一个对象.那应该肯定会回来False,或者什么会被打破.
你永远不会想is在这里回归真实.想象一下,如果你这样做:
foo = []
bar = []
foo.append(42)
Run Code Online (Sandbox Code Playgroud)
如果bar现在包含你,你会感到非常惊讶42.如果is返回true,则表示两个[]调用都返回完全相同的对象,然后追加到foo引用中将显示bar.
对于不可变对象,缓存对象是有意义的,此时is 可能返回true,就像空元组一样:
>>> () is () # are these two things the same object?
True
Run Code Online (Sandbox Code Playgroud)
CPython实现优化了空元组创建; 你将始终获得完全相同的对象,因为这样可以节省内存并使某些操作更快.因为元组是不可变的,所以这是完全安全的.
如果您希望测试值相等,那么您的操作符错误.==改为使用运算符:
>>> [] == [] # do these two objects have the same value?
True
Run Code Online (Sandbox Code Playgroud)