[英]Compare two Python strings with hyphen/dash
我試圖與 Python 中的字符串進行比較,並注意到當字符串中存在破折號/連字符時,它不會等同於相同的字符串。 例如:
>>>teststring = 'newstring'
>>>teststring is 'newstring'
True
然后,如果我添加一個破折號
>>>teststring = 'new-string'
>>>teststring is 'new-string'
False
為什么會這樣,比較字符串和破折號的最佳方法是什么?
無論如何,您永遠不應該使用is
來比較相等性。 is
身份測試。 使用==
。
坦率地說,我不知道為什么'newstring' is 'newstring'
。 我確定它會根據您的 Python 實現而有所不同,因為它看起來像是一個節省內存的緩存來重用短字符串。
然而:
teststring = 'newstring'
teststring == 'newstring' # True
nextstring = 'new-string'
nextstring == 'new-string' # True
基本上都是is
不會被測試id
這個來確保它們是相同的。
id('new-string') # 48441808
id('new-string') # 48435352
# These change
id('newstring') # 48441728
id('newstring') # 48441728
# These don't, and I don't know why.
您不應該使用is
進行字符串比較。 Is 檢查兩個對象是否相同。 您應該在這里使用相等運算符==
。 它比較對象的值,而不是對象的 id。
在這種情況下,看起來 Python 正在對字符串對象以及行為進行一些對象優化。
>>> teststring = 'newstring'
>>> id(teststring)
4329009776
>>> id('newstring')
4329009776
>>> teststring = 'new-string'
>>> id(teststring)
4329009840
>>> id('new-string')
4329009776
>>> teststring == 'new-string'
True
>>> teststring is 'new-string'
False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.