我看到這個問題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