python初始化矩阵相关

做算法题经常需要初始化一个二维的dp数组

下面两种方法是最常用的

python 复制代码
matrix = [[0]*n]*n
matrix = [[0]*n for _ in range(n)]

以前经常混用也没发现什么问题,直到昨天debug的时候发现第一种初始化之后对矩阵进行赋值时混乱的,比如matrix[0][1]=2会导致所有行的第二列都变成2。

于是就发现了背后的原因:

第一种初始化方法创建矩阵时使用了相同的子列表对象。在Python中,使用 [0] * n 这样的方式创建子列表时,实际上是对相同的子列表对象的引用。因此,当你修改其中一个子列表的元素时,其他子列表也会受到影响。

为了避免这种问题,可以使用列表生成式来创建,也就是第二种方法,确保每个子列表都是独立的对象。

下面这张图就非常清晰易懂啦

网址:pythontutor

相关推荐
CodeAllen嵌入式3 分钟前
Rust 正式成为 Linux 永久核心语言
linux·开发语言·rust
EZ_Python4 分钟前
告别WPS会员!用Python自制电子发票批量打印排版工具
python·自动化
superman超哥5 分钟前
Rust 堆内存与栈内存的所有权管理:精确控制的内存模型
开发语言·后端·rust·编程语言·内存模型·堆内存与栈内存·所有权管理
写文章的大米6 分钟前
1 分钟读懂:Python 装饰器
python
JeffDingAI6 分钟前
【CANN训练营】在CANN8.5上体验Hello World开启Ascend C学习
c语言·开发语言·人工智能·学习
MyBFuture8 分钟前
C#表格与定时器实战技巧
开发语言·windows·c#·visual studio
2501_9216494912 分钟前
股指期货 API 入门指南:如何获取实时行情与构建交易系统
python·websocket·金融·区块链·restful
YGGP15 分钟前
【Golang】LeetCode 2. 两数相加
开发语言·leetcode·golang
liuhaikang15 分钟前
鸿蒙高性能动画库——lottie-turbo
java·开发语言·nginx
Hcoco_me15 分钟前
大模型面试题41:RoPE改进的核心目标与常见方法
开发语言·人工智能·深度学习·自然语言处理·transformer·word2vec