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

Susan Sarandon
發布: 2024-10-30 17:05:25
原創
601 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板