網站首頁 編程語言 正文
使用[[v]*n]*n遇到的坑
今天通過[[v]*n]*n快速創建列表, 當我使用索引修改值時, 本來是打算修改a[0][0]這一個元素的第一個值, 但是打印結果卻將三個元素第一值都修改了,所以就記錄一下!
遇到的問題
>> 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]) ?# 可以發現,三個元素使用的是同一個內存地址編號
836879108296
# 推薦使用這種方法或者使用列表推導式
>> data2 = [[1,2,3],[4,5,6],[7,8,9]]
>> id(data2[0])
836879107208
>> id(data2[1])
836879108552
>> id(data2[2])
836879109960
# 使用列表推導式
>> data3 = [[1,2] for i in range(10)]
>> data3[0][0] = 100
[[100, 2], ?# 只是修改了第一個元素的第一個值
?[1, 2],
?...
?[1, 2]]
# 查看內存地址
>> 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]]
哇,是不是對結果很迷,為啥改變一個值會對列為0的所有元素改變呢?
解析:我們可以看下他們對應的內存指向地址
問題出在這里了。
方式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]]
原文鏈接:https://blog.csdn.net/u011361138/article/details/80138226
相關推薦
- 2022-01-31 pytorch:tensor與numpy轉換 & .cpu.numpy()和.numpy()
- 2024-02-16 springmvc中的數據提交方式
- 2023-01-09 使用C#?11的靜態接口方法改進?面向約定?的設計方法_C#教程
- 2022-04-11 android原生與kotlin驗證碼倒計時
- 2022-04-07 你知道怎么在?HTML?頁面中使用?React嗎_React
- 2022-08-04 C#中ListView用法實例_C#教程
- 2022-08-31 ASP.NET?Core配置設置之Configuration包_實用技巧
- 2022-05-19 基于角色的權限控制模型RBAC圖文教程_相關技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支