python初始化二維數組的小問題

來源:互聯網
上載者:User
python二維數組初始化問題

引子:今天在寫用Python寫01背包的演算法課作業時,發現一個關於二維數組的小問題,本來期末已經很忙了,但這個問題還是值得記錄下來的,因為這不是第一次遇到了,這次花了將近一個小時才搞明白。 問題:

以如下方式初始化一個二維數組,在使用的過程中有沒有問題。

matrix = [[0] * n] * m

有問題。可以做個實驗:

>>> m = 3>>> n = 4>>> matrix = [[0] * n] * m>>> matrix[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]>>> matrix[1][2] = 1>>> matrix[[0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0]]>>>

可以看出,我只修改了matrix[1][2]這一個元素,但從結果來看,matrix這個二維數組的每一個一維數組的第3個(下標為2)元素都被修改了。對此我的理解是:在申請matrix數組時,“[0] * n”這個一維數組可能只申請了一個,“ * m”這操作,只是建立了m個指向“[0] * n”的引用,因此,若修改這個一維數組中的元素,則matrix中m個一位元組都會被修改。 更詳細解釋可以參考此篇部落格在python中定義二維數組。 解決方案:

換種初始化的方式:

>>> matrix = [[0] * n for i in range(0, m)]>>> matrix[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]>>> matrix[1][2] = 1>>> matrix[[0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0]]>>>

可以看出,上述那種我們想要避免的情況已經不再出現了。 參考文獻

1.在python中定義二維數組,woshare,部落格園,http://www.cnblogs.com/woshare/p/5823303.html。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.