首頁 >後端開發 >Python教學 >Python 的字串「is」運算子背後有什麼魔力?

Python 的字串「is」運算子背後有什麼魔力?

DDD
DDD原創
2024-10-21 17:46:03708瀏覽

What's the Magic Behind Python's 'is' Operator with Strings?

實作 Python 的字串「is」運算子:綜合指南

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn