[Python] list 用 `.extend()` 與 `+=` 的差別

譬如有兩個 list ab,使用 a.extend(b)a += b 有什麼相同或不同?有沒有什麼 general 的 best practice for using one rather than the other?

其實在這個情境下,這兩個用法幾乎一樣。它們都會直接 in-place 的修改 a,把 b 裡面的元素加到 a 的後面

  • += 會呼叫 list 的 .__iadd__() 來做 in-place 的修改
    • 所以在這個情境下,b 可以是任何 iterable,譬如 [] += {} 會得到 []
    • 假如用 += 的是 immutable 的 type,Python 發現沒有 .__iadd__(),接著就會呼叫它的 .__add__(),此情況下 a += b 等同於 a = a + b

以下列出少數有差別的地方:

結論
可以都用 .extend() 就好,consistency 也是一個重點。對於有差別的部分,一般情況下速度的差異可以忽略,其他的差別都是 .extend() 比較好,而且它在語意上的描述也也更貼切。

參考資料:

#

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×