回答
您創建了兩個可變對象,然後用is
,看看那些是同一個對象。那肯定會回到False
,否則會被打破。
你不會想要is
在這裏返回true。試想一下,如果你這樣做:
foo = []
bar = []
foo.append(42)
,那麼你會很驚訝,如果bar
現在包含42
。如果is
返回true,意味着兩個[]
調用返回完全相同的對象,則在bar
的引用中可以看到追加到foo
。
對於不變對象,是有意義的緩存對象,在這一點is
可以返回true,就像空的元組:
>>>() is() # are these two things the same object?
True
CPython的實施,優化空的元組的創建;您將始終獲得完全相同的對象,因爲這可以節省內存並使某些操作更快。因爲元組是不可變的,所以這是完全安全的。
如果您希望測試值相等而不是,那麼您得到了錯誤的運算符。使用==
操盤手:
>>> [] == [] # do these two objects have the same value?
True
[]
就像list()
,如果你這樣做:
a = list()
b = list()
明確a
和b
是兩個完全地不同的對象,因此:
a is b # False
像
list() is list() # False
像
[] is [] # False
爲什麼空列表對象的創建方式很重要? –
@MartijnPieters,沒關係,也許我沒有解釋清楚,或者你不明白我想解釋什麼? – Netwave
我的意思是,如果你使用'[] is []'或者list()是list()',那麼它並不重要。這兩個表達式都會創建空列表對象要說*'[]'就像'list()'*,你沒有解釋爲什麼'is'測試返回'False',因爲'[]'和'list()'之間的區別不是這裏很重要。另外,你的'== False'測試不正確;你正在測試'(a是b)和(b == False)',因爲Python比較操作符是*鏈接的*。 –
在蟒蛇is
做了reference equality check
像[]和[]他們是可以檢查不同的對象,通過
print id([]),id([])
或
In [1]: id([])
Out[1]: 140464629086976
In [2]: id([])
Out[2]: 140464628521656
兩者都會返回不同的地址,兩者都是不同的對象所以總是會給出錯誤
[] is []
輸出
false
那些'id'測試沒有做你認爲他們是。 'print'打印兩次相同的數字是很常見的,因爲這些列表的壽命不會重疊。同樣,這就是爲什麼用'id'值測試'=='測試會給出True而不是False。 – user2357112
- 1. 爲什麼在VB.Net中評估爲false?
- 2. 爲什麼我在Python中的if語句評估爲False?
- 3. 爲什麼list.append評估爲false?
- 4. 爲什麼$((true == false))在bash中評估爲1?
- 5. FunctionN#==評估爲False
- 6. 爲什麼`to_unsigned(0,4)> = -1`在運行時評估爲`FALSE`?
- 7. 爲什麼評估函數將String設置爲「false」而不是布爾false?
- 8. 爲什麼_ = $ = + [],++ _ +''+ $評估爲10
- 9. 在Ruby中評估爲false的是什麼?
- 10. Mysql select不評估爲false
- 11. 爲什麼評估「(Double.MinValue + 1)> Double.MinValue」爲false?
- 12. 爲什麼下面的代碼評估爲false?
- 13. 爲什麼這些xsl:當測試總是被評估爲false?
- 14. 爲什麼這個表達式評估爲false?
- 15. 爲什麼這個JavaScript表達式評估爲false?
- 16. 爲什麼表達式(0 == 0&1 == 1)評估爲False?
- 17. 爲什麼Number.MIN_VALUE <-1219312(或任何小值)評估爲false?
- 18. 爲什麼此浮點比較評估爲false?
- 19. 爲什麼關於UIColor whiteColor的聲明評估爲false?
- 20. 爲什麼「$ this - > _ query-> execute()」總是評估爲false?
- 21. 爲什麼cos(M_PI_2)== float(0)評估爲false? C++
- 22. 爲什麼函數對象在python中評估爲True?
- 23. 爲什麼4 ** 56在Python中評估爲5192296858534827628530496329220096L?
- 24. 爲什麼form.is_valid()在POST請求上評估false
- 25. 爲什麼在量角器中評估()?
- 26. 爲什麼在Scheme中不評估?
- 27. 0 == *評估結果爲true,0 === *評估結果爲false
- 28. PHP零整數正在評估爲false
- 29. 爲什麼-1/2在C++中評估爲0,但在Python中爲-1?
- 30. 爲什麼-4 <= -4評估爲真,爲什麼9> = 9在Ruby中評估爲真?
也許你應該解釋爲什麼你認爲它應該是真的嗎? –
'[]是[]'也會失敗:這兩個是**不同的對象**。 '是'進行**參考相等檢查**。 –
爲什麼這應該是真的?你創建了兩個空的可變對象,你不希望它們是同一個對象。 –