阅读这本非常酷的在线书籍,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 字典?
最佳答案
在 Python 中,==
运算符按值进行比较。根据the Python 2.7 documentation :
The operators
is
andis not
test for object identity.
请参阅以下示例:
print({} is {}) # False
print({} == {}) # True
如Ignacio Vazquez-Abrams说,请注意,这并不一定适用于所有值。例如,9 is 9
在某些实现中是正确的,但不要指望它。基本上,原因是数值可能只是对同一值的所有引用的单个对象的引用,或者单独的对象。例如,CPython 使用 -5 到 256 之间的数字引用(包含 -5 和 256)(有关更详细的说明,请参阅 this question)。
print(9 is 9) # dependent on implementation
print(9 == 9) # True
关于javascript - 在 Python 中比较字典与在 JavaScript 中比较对象之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570871/