這個問題在這里已經有了答案: 串列更改意外地反映在子串列中的串列 (17個答案) 昨天關門。
我試圖理解為什么 Python 中存在以下行為。
如果我制作兩個等價矩陣
matrix1 = [[False] * 3] * 3
matrix2 = [[False for x in range(3)] for y in range(3)]
然后我嘗試使左上角的單元格等于True。
matrix1[0][0] = True
matrix2[0][0] = True
每個陣列都以不同的方式更改。
matrix1 is now [[True, False, False], [True, False, False], [True, False, False]]
matrix2 is now [[True, False, False], [False, False, False], [False, False, False]]
matrix2是我所期待的行為。為什么matrix1行為不同?
uj5u.com熱心網友回復:
使用 時[]*3,每個元素都指向同一個物件,因此更改一個元素會更改其他元素。您可以將其視為將串列中的元素相乘的一種方式。
當您使用 時[for x in range(3)],它會創建三個單獨的專案。更改一項不會影響其他項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/406119.html
標籤:
