sam*_*fer 5 python string special-characters python-2.7
我试图与 Python 中的字符串进行比较,并注意到当字符串中存在破折号/连字符时,它不会等同于相同的字符串。例如:
>>>teststring = 'newstring'
>>>teststring is 'newstring'
True
Run Code Online (Sandbox Code Playgroud)
然后,如果我添加一个破折号
>>>teststring = 'new-string'
>>>teststring is 'new-string'
False
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况?将字符串与破折号进行比较的最佳方法是什么?
无论如何,你不应该使用is
比较相等性。is
身份测试。使用==
。
坦白说我不知道为什么'newstring' is 'newstring'
。我确信它会根据你的 Python 实现而有所不同,因为它看起来像是一个节省内存的缓存来重用短字符串。
然而:
teststring = 'newstring'
teststring == 'newstring' # True
nextstring = 'new-string'
nextstring == 'new-string' # True
Run Code Online (Sandbox Code Playgroud)
基本上所有的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.
Run Code Online (Sandbox Code Playgroud)