采用2種不同方式創建2個二維串列,分別向二維串列中第二個串列添加2個元素,但是兩個二維串列得到不同的結果,只有其中一個滿足預期結果,求高手解答一下,謝謝!
原始碼如下
list5 = [[0, ] * 5] * 4
list6 = [[0 for i in range(5)] for i in range(4)]
print(list5)
print(list6)
list5[2].extend([44, 65])
list6[2].extend([44, 65])
print(list5)
print(list6)
運行結果如下
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[0, 0, 0, 0, 0, 44, 65], [0, 0, 0, 0, 0, 44, 65], [0, 0, 0, 0, 0, 44, 65], [0, 0, 0, 0, 0, 44, 65]]
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 44, 65], [0, 0, 0, 0, 0]]
uj5u.com熱心網友回復:
python的串列有個淺拷貝和深拷貝的問題,你可以在網上收一下。list5方式的應該是淺拷貝,雖然復制了幾個串列,但它們都指向同一個地址,所以改變其一個,其它的都會變成一樣的。
list6的方式應該是深拷貝,就是重新生成了一個新的串列物件,每個串列項的地址都是不同的,雖然值看上去是一樣。
具體資訊可以參看網上文章。
uj5u.com熱心網友回復:
list5的賦值與list6不同。list5獲得的子串列指向同一個記憶體地址,而通過for回圈對list6賦值時,每個子串列都指向不同的記憶體地址。因此結果會不同。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/251212.html
上一篇:大學生卑微求助
下一篇:python輸出字典中的元素
