在python中使用[[v]*n]*n遇到的坑及解決
使用[[v]*n]*n遇到的坑
今天通過[[v]*n]*n快速創(chuàng)建列表, 當(dāng)我使用索引修改值時(shí), 本來是打算修改a[0][0]這一個(gè)元素的第一個(gè)值, 但是打印結(jié)果卻將三個(gè)元素第一值都修改了,所以就記錄一下!
遇到的問題
>> data = [[0] *3] *3 >> data [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >> data[0][0] = 1 >> data [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
通過一番研究
>> id(data[0]) 836879108296 >> id(data[1]) 836879108296 >> id(data[2]) ?# 可以發(fā)現(xiàn),三個(gè)元素使用的是同一個(gè)內(nèi)存地址編號(hào) 836879108296 # 推薦使用這種方法或者使用列表推導(dǎo)式 >> data2 = [[1,2,3],[4,5,6],[7,8,9]] >> id(data2[0]) 836879107208 >> id(data2[1]) 836879108552 >> id(data2[2]) 836879109960 # 使用列表推導(dǎo)式 >> data3 = [[1,2] for i in range(10)] >> data3[0][0] = 100 [[100, 2], ?# 只是修改了第一個(gè)元素的第一個(gè)值 ?[1, 2], ?... ?[1, 2]] # 查看內(nèi)存地址 >> id(data3[0]) 836879107528 >> id(data3[1]) 836848339912
使用[[v]*n]*m遇到的問題
需求:想通過python生成m行n列的矩陣
方式1:(有問題)
data = [[0]*3]*4 ? #4行3列 data
輸出
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
修改data[0][0]元素的值
data[0][0] = 1 data
輸出
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
哇,是不是對(duì)結(jié)果很迷,為啥改變一個(gè)值會(huì)對(duì)列為0的所有元素改變呢?
解析:我們可以看下他們對(duì)應(yīng)的內(nèi)存指向地址
問題出在這里了。
方式2:
#輸入 data1 = [[0 for i in range(3)] for j in range(4)] data1 # 輸出 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] #輸入 data1[0][0] = 1 data1 #輸出 [[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用anaconda的pip安裝第三方python包的操作步驟
今天小編就為大家分享一篇使用anaconda的pip安裝第三方python包的操作步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06詳解python中Numpy的屬性與創(chuàng)建矩陣
這篇文章給大家分享了關(guān)于python中Numpy的屬性與創(chuàng)建矩陣的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2018-09-09用Q-learning算法實(shí)現(xiàn)自動(dòng)走迷宮機(jī)器人的方法示例
這篇文章主要介紹了用Q-learning算法實(shí)現(xiàn)自動(dòng)走迷宮機(jī)器人的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06python基礎(chǔ)教程之分支、循環(huán)簡單用法
這篇文章主要介紹了python基礎(chǔ)教程之分支、循環(huán)簡單用法,結(jié)合實(shí)例形式分析了Python分支及循環(huán)語句的簡單使用方法,需要的朋友可以參考下2016-06-06云原生Docker部署Django和mysql項(xiàng)目全過程
最近在學(xué)習(xí)用docker部署Django項(xiàng)目,經(jīng)過百折不撓的鼓搗,終于將項(xiàng)目部署成功,下面這篇文章主要給大家介紹了關(guān)于云原生Docker部署Django和mysql項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12python中將數(shù)據(jù)生成為Excel文件的5種方法舉例
工作中需要把數(shù)據(jù)導(dǎo)入到excel中,記錄一下操作方式,這篇文章主要給大家介紹了關(guān)于python中將數(shù)據(jù)生成為Excel文件的5種方法,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10Python Opencv實(shí)戰(zhàn)之印章提取的實(shí)現(xiàn)
很多時(shí)候我們需要電子版的章,但有些同學(xué)并不會(huì)通過Photoshop摳圖獲取。因此本文將利用Python OpenCV來實(shí)現(xiàn)印章的提取,感興趣的可以了解一下2022-03-03