javascript - 在 Python 中比较字典与在 JavaScript 中比较对象之间的区别

标签 javascript python object dictionary

阅读这本非常酷的在线书籍,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 and is 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/

相关文章:

python - 在 python 中如何获取 kern.module_path 的值?

javascript - 使用短路评估进行对象解构

javascript - 单击和克隆时间选择器无法工作

javascript - IONIC 使用 JSON 格式建议

python - 如何子类化 numpy .`ma.core.masked_array` ?

javascript - 将Google结果对象(纯js)转换为Python对象

Javascript:检查对象,如果[条件],则返回x

Javascript:在循环内生成对象键并将对象数组插入每个对象?

javascript - 当我的函数抛出错误时防止 JS 完全中断?

javascript - 在 React 组件的渲染函数中返回 DOM 元素