为什么" []是[]"在python中求值为False

时间:2017-03-02 10:46:58

标签: python list

在交互式python shell中试试这个。

[] is [ ]

以上返回False,为什么?

4 个答案:

答案 0 :(得分:14)

您创建了两个可变对象,然后使用is查看这些是否是相同对象。那应该肯定会返回False,否则就会被打破。

你不会希望is在这里返回true。想象一下,如果你这样做:

foo = []
bar = []
foo.append(42)

如果bar现在包含42,您会感到非常惊讶。如果is返回true,表示两个[]调用都返回完全相同的对象,则foo的引用中会显示追加bar

对于 immutable 对象,缓存对象是有意义的,此时is 可能返回true,就像空元组一样:

>>> () is ()  # are these two things the same object?
True

CPython实现优化了空元组创建;你将始终获得完全相同的对象,因为这样可以节省内存并使某些操作更快。因为元组是不可变的,所以这是完全安全的。

如果您希望测试值相等,那么您的操作符错误。请改用==运算符:

>>> [] == []  # do these two objects have the same value?
True

答案 1 :(得分:1)

在python is中,reference equality check类似[]和[]它们是不同的对象,您可以通过

检查
print id([]),id([])


 In [1]: id([])
Out[1]: 140464629086976

In [2]: id([])
Out[2]: 140464628521656

两者都会返回不同的地址,两者都是不同的对象所以总是会给出错误的

[] is []

<强>输出

false

答案 2 :(得分:0)

[]list()类似,如果你这样做:

a = list()
b = list()

显然ab是两个完全不同的对象,因此:

a is b # False

list() is list() # False

[] is [] # False

答案 3 :(得分:0)

==运算符比较两个操作数的值并检查值是否相等。而is运算符检查两个操作数是否都引用相同的对象。

id('') : 139634828889200
id('') : 139634828889200
id('') : 139634828889200

id([]) : 139634689473416
id([]) : 139634689054536
id([]) : 139634742570824