通过阅读这本非常酷的在线书籍Speaking JS,我发现了一个简洁的怪癖,说明了比较如何在JavaScript中运行:
原始值是“按值比较”:
> 3 === 3
true
> 'abc' === 'abc'
true
然而,对象是“通过引用比较”:
> {} === {} // two different empty objects
false
> var obj1 = {};
> var obj2 = obj1;
> obj1 === obj2
true
一位同事和我正在聊聊这个,并想知道这个原则是否适用于Python。
因此,我们破解了一个Python解释器,看看这种比较在该语言中是否有所不同。
>>> 3 == 3
True
>>> {} == {}
True
事实证明,如果两个字典的内容相同,则它们在Python中的解析是相同的。
这是否意味着Python词典是“按价值比较”?
有没有办法通过引用比较Python词典?
答案 0 :(得分:4)
在Python中,==
运算符按值进行比较。根据{{3}}:
运算符
is
和is not
测试对象标识。
请参阅以下示例:
print({} is {}) # False
print({} == {}) # True
如the Python 2.7 documentation所述,请注意,这并不一定适用于所有值。例如,9 is 9
在某些实现中是正确的,但不要指望它。基本上,原因是数值可能只是对同一值的所有引用或单独对象的单个对象的引用。例如,CPython使用-5到256之间的数字引用(包括更详细的说明,请参阅Ignacio Vazquez-Abrams)。
print(9 is 9) # dependent on implementation
print(9 == 9) # True