我看到这个问题here,现在我很好奇。与Python中的===签名相比,is
运算符在python中的行为如何?Python中的'is'关键字与JS中的===关键字相同吗?
3
A
回答
7
不,他们是不一样的。 is
在Python检查,如果两个对象在Python,即相同id
。他们是相同的,即使在记忆中。有些事情,你可以做检查的是:
>>> a='foo'
>>> a is 'foo'
True
>>> id(a)
44434088
>>> id('foo')
44434088
>>> a=[1]
>>> a is [1]
False
>>> id(a)
45789792
>>> id([1])
4469824
2
在Javascript中,当比较平等的话,例如,[] == ""
将返回true
的==
运营商将尽隐式类型转换。的操作者===
用于检查而不类型转换平等([] === ""
返回false。)
在Python中,is
关键字检查引用相等。所以x is y
只会真,如果x
和y
都指向返回同一个对象在内存中。例如:
x = [1, 2, 3]
y = [1, 2, 3]
z = x
x is y # False
x is z # True
可能导致的这方面的一些陷阱都是空,x is None
建议的检查。 None
总是指向内存中的同一个空间,所以你可以放心,x is None
总是返回True
如果x
具有无值(和False
其他)。
您也可能会遇到一些怪癖,如下所示:
x = 1
y = 1
x is y # True
以上是CPython的(也许你正在使用Python解释器),其中小整数是一个不规范的行为的结果在程序启动时全部分配给特定的对象。您可以检查,这并不为更大的数字工作:
x = 1000
y = 1000
x is y # False
除非你检查0,或者如果您特别要确保两个变量都指向内存中的同一个位置,你应该使用==
而不是is
。
1
编号为is
Python看起来好像是更严格比JS中的===
。
在JS:
对于值类型(编号):
a === b
返回真,如果a和b具有 相同的值,并且是同一类型的对于引用类型:
a === b
返回真,如果a和b的参考 完全相同的对象对于字符串:
a === b
返回true,如果a和b都是字符串并且 包含完全相同的字符
在Python:
没有矛盾,除了id(obj1)
相同id(obj2)
,这两个对象是不相同的,并obj1 is obj2
将评估为False
。
相关问题
- 1. '是'VB.NET关键字与Object.ReferenceEquals相同吗?
- 2. 的Python:用相同的关键字
- 3. 找到与python文件中的关键字相关联的值
- 4. 'file'是python中的关键字吗?
- 5. 使用带有“null”关键字的“is”关键字c#7.0
- 6. 是Python中的关键字
- 7. Java中是否有任何关键字与C#中的'AS'关键字相似?
- 8. 如何转义与python关键字匹配的bash关键字?
- 9. 如何在Python 2.7中将关键字从关键字复制到关键字?
- 10. 在Python中是'输入'关键字吗?
- 11. 在ANTLR语法中使用不同的关键字关键字
- 12. 得到字典中与关键字相关的值的计数python
- 13. dict.keys()中的关键字与关键字有什么区别?
- 14. Python:存储与字典中的键相关联的列表值
- 15. C#“is”关键字的使用模式
- 16. 字是节点js中的关键字吗?
- 17. 是'(A)'的关键字吗?
- 18. Python,不同类型的关键字
- 19. AngularJS控制器模式和$ scope与关键字this相同吗?
- 20. Python字典与列表关键字
- 21. 在关键词与关键字OR
- 22. 如何在Python中实现'is'关键字?
- 23. Python的关键字参数
- 24. scipy.stats.gaussian_kde中的关键字有误吗?
- 25. @interface是Java中的关键字吗?
- 26. 是javascript中的关键字不好吗?
- 27. 是$ _SESSION ['user_id']中的'user_id'关键字吗?
- 28. 的Python:与关键字参数
- 29. Identifer与关键字
- 30. 打印与字典值相关的关键字
这是一个怎样的问题?它没有提到任何地方的JS,虽然我知道'is'和==之间的区别,我想知道它与'==='的关系。 – Ares