在 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中文網其他相關文章!