簡體   English   中英

用連字符/破折號比較兩個 Python 字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM