在python中使用[[v]*n]*n遇到的坑及解決
使用[[v]*n]*n遇到的坑
今天通過[[v]*n]*n快速創(chuàng)建列表, 當(dāng)我使用索引修改值時, 本來是打算修改a[0][0]這一個元素的第一個值, 但是打印結(jié)果卻將三個元素第一值都修改了,所以就記錄一下!
遇到的問題
>> 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),三個元素使用的是同一個內(nèi)存地址編號 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], ?# 只是修改了第一個元素的第一個值 ?[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]]
哇,是不是對結(jié)果很迷,為啥改變一個值會對列為0的所有元素改變呢?
解析:我們可以看下他們對應(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]]
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
分析Python感知線程狀態(tài)的解決方案之Event與信號量
本文主要介紹了如何感知線程狀態(tài)、如何停止一個線程、線程之間的Event用法2021-06-06
為Python的web框架編寫MVC配置來使其運(yùn)行的教程
這篇文章主要介紹了為Python的web框架編寫MVC配置來使其運(yùn)行的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04
python實(shí)現(xiàn)可視化動態(tài)CPU性能監(jiān)控
這篇文章主要為大家詳細(xì)介紹了python可視化動態(tài)CPU性能監(jiān)控,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
python修改pip install默認(rèn)安裝路徑的詳細(xì)步驟
pip安裝的第三方庫默認(rèn)存放在C盤中,為了便于管理和不過度占用C盤空間所以想修改默認(rèn)的pip路徑,文章通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
PyTorch清理CPU緩存的實(shí)現(xiàn)步驟
在使用PyTorch進(jìn)行深度學(xué)習(xí)時,頻繁的數(shù)據(jù)和計(jì)算可能導(dǎo)致CPU緩存滿載,影響性能和內(nèi)存使用,適時清理CPU緩存有助于管理內(nèi)存占用,下面就來介紹一下如何使用2024-09-09
Python實(shí)現(xiàn)銀行賬戶資金交易管理系統(tǒng)
這篇文章主要介紹了Python銀行賬戶資金交易管理系統(tǒng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Python基于pygame實(shí)現(xiàn)的font游戲字體(附源碼)
這篇文章主要介紹了Python基于pygame實(shí)現(xiàn)的font游戲字體,涉及Python響應(yīng)鍵盤按鍵動態(tài)操作圖片元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11

