您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

对带有字符串的`is`运算符感到困惑

对带有字符串的`is`运算符感到困惑

我相信这与字符串实习有关。从本质上讲,其思想是仅存储每个不同字符串的单个副本,以提高某些操作的性能

基本上,a is b起作用的原因是(正如您可能已经猜到的)在这两种情况下,Python都引用了一个不变的字符串。当字符串很大(很可能还有其他一些我不理解的因素)时,则不会这样做,这就是第二个示例返回False的原因。

编辑:事实上,奇怪的行为似乎是交互式环境的副作用。如果你把你相同的代码,并把它变成一个Python脚本,都a is bktr is ptr返回True。

a="poi"
b="poi"
print a is b  # Prints 'True'

ktr = "today is a fine day"
ptr = "today is a fine day"
print ktr is ptr  # Prints 'True'

这很有意义,因为Python很容易解析源文件并在其中查找重复的字符串文字。如果动态创建字符串,那么即使在脚本中,其行为也有所不同。

a="p" + "oi"
b="po" + "i"
print a is b  # Oddly enough, prints 'True'

ktr = "today is" + " a fine day"
ptr = "today is a f" + "ine day"
print ktr is ptr  # Prints 'False'

至于为什么a is b仍然结果为True,也许分配的字符串足够小以保证可以快速搜索到内部集合,而另一个则不能?

其他 2022/1/1 18:45:55 有258人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶