Python 的微妙區別:「i = x」與「i = i x」
在Python 中,程式設計師經常使用「== 」作為加法賦值的簡寫,期望它的行為與「i = i x」相同。然而,這個假設並不總是正確的。
「i = x」呼叫「__iadd__」方法,而「i = i x」呼叫「__add__」。在大多數情況下,「__iadd__」和「__add__」會傳回相同的結果。但是,這可能會根據相關對象的不同而有所不同。
對於可變對象,「__iadd__」會就地修改對象,而「__add__」會建立一個新實例。然而,對於不可變對象,這兩種方法都會傳回一個新實例。
對於可變對象,「__iadd__」對於就地修改物件非常有用,從而節省記憶體。例如:
a = [1, 2, 3] b = a b += [1, 2, 3] print(a) # [1, 2, 3, 1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
與此對比:
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
在後一個範例中,a 和 b 成為不同的物件。
在某些情況下,「__add__」也可以呼叫「__radd__」。例如,如果一個物件沒有實作“__add__”,解釋器可能會嘗試使用另一個物件的“__radd__”方法。
總之,「i = x」和「i = i x」是通常等同於可變物件。但是,對於不可變對象,「__iadd__」和「__add__」會建立不同的行為。理解這些細微差別對於有效的 Python 程式設計至關重要。
以上是Python 中的 `i = x` 何時與 `i = i x` 不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!