【发布时间】:2021-11-07 09:31:55
【问题描述】:
我知道is 在 python 中测试身份而不是对象(例如字符串)的相等性。但是我很好奇in 在用于检查项目是否在列表/字典中时是否检查相等或身份?
我无法可靠地对此进行测试,因为我的解释器似乎可以随意自动使用 interning 字符串(正如您在下面看到的,即使 is 测试通过也意味着在内存中只为所有人创建了一个字符串副本delta) 的表示:
>>> l = ['a', 'b', 'delta']
>>> if 'delta' in l:
... print('K')
...
K
>>> if l[2] is 'delta':
... print('K')
...
K
>>> if ('delt' + 'a') in l:
... print('K')
...
K
>>> if ('delt' + 'a') is l[2]:
... print('K')
...
K
【问题讨论】:
-
python 编译器将字符串文字
'delt' + 'a'合并到'delta'中,然后检查是否存在重复项。如果你想在运行时生成一个非实习的字符串,请执行''.join('delta')之类的操作。 -
@tdelaney 对解释器如何检查实习重复以及如何避免它的评论表示赞赏!
标签: python