为什么"[]是[]在python中评估为False

Jon*_*han 5 python list

在交互式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)