在 Python 中,“is”运算符通常用于测试字符串的相等性。然而,它的实现从其他相等运算符(如“__eq__”)中脱颖而出。本文探讨了“is”在 Python 中如何运行的复杂性。
与检查内容相等性的“__eq__”不同,“is”评估同一性。处理字符串时,这表示“is”确定两个字符串是否占用相同的内存位置。
尝试在自定义类中模仿“is”行为时会出现挑战。定义“__is__”方法是不够的,因为 Python 需要一个特定的实现。为了符合 Python 的期望,了解字符串中驻留的本质至关重要。
驻留涉及将字符串对象存储在中央缓存中,确保对同一字符串的多个引用指向单个共享实例。这种优化通过减少内存消耗和提高速度来增强性能。
在 Python 中,像“abc”这样的字符串文字会自动保留。因此, (('abc' == 'abc') 和 ('abc' is 'abc')) 计算结果为 True。但是,对于自定义字符串,必须显式执行实习。
以下示例说明了 'is' 和 '__eq__' 与实习和非实习字符串之间的区别:
<code class="python">>>> s = 'str' >>> s is 'str' True >>> class MyString: ... def __init__(self): ... self.s = 'string' ... def __eq__(self, s): ... return self.s == s ... >>> m = MyString() >>> m is 'string' False >>> sys.intern(m) is 'string' # After interning, 'is' returns True True</code>
To总结一下,“is”检查 Python 中的对象身份,比较内存位置。对于字符串来说,这意味着实习起着重要作用。驻留字符串共享相同的内存地址,允许“is”正确确定相等性。在自定义类中实现“is”时,确保适当处理实习对于复制 Python 的行为至关重要。
以上是Python 的字符串'is”运算符背后有什么魔力?的详细内容。更多信息请关注PHP中文网其他相关文章!