首頁  >  文章  >  後端開發  >  為什麼 `list.__iadd__` 會修改原始列表和分配的列表,而 `list.__add__` 只修改分配的列表?

為什麼 `list.__iadd__` 會修改原始列表和分配的列表,而 `list.__add__` 只修改分配的列表?

Susan Sarandon
Susan Sarandon原創
2024-10-30 17:05:25537瀏覽

Why does `list.__iadd__` modify both original and assigned lists, while `list.__add__` only modifies the assigned list?

list.__iadd__ 和list.__add__

之間的行為差異

<code class="python">x = y = [1, 2, 3, 4]
x += [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4, 4]</code>

之間的行為差異

<code class="python">x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4]</code>

考慮以下程式碼片段:

相反,觀察這個:

為什麼這兩個程式碼片段的行為不同?

  • 解釋

      關鍵的區別在於使用「 「 操作員。在第一個片段:
    • x = [4] 使用列表類別的__iadd__ 方法,該方法:
改變原始列表(x) -place

使用第二個列表([4]) 中的元素來擴展它

  • 這會導致x 和y 都被修改以包含該值4.
  • 但是,在第二個片段中,x = x [4] 使用__add__ 方法:
x [4] 透過連接x 與[4] 創建一個新列表

然後x 變數被重新分配給這個新列表y 保持不變,因為它是一個不同的物件因此,x 的值為[1, 2 , 3, 4, 4] 而y 仍保持原始值[1, 2, 3, 4]。

以上是為什麼 `list.__iadd__` 會修改原始列表和分配的列表,而 `list.__add__` 只修改分配的列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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