python初始化矩阵相关

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

下面两种方法是最常用的

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

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

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

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

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

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

网址:pythontutor

相关推荐
m0_470857641 分钟前
Python如何构建异步消息队列_利用asyncio配合Redis实现任务分发
jvm·数据库·python
2301_781571421 分钟前
SQL嵌套子查询中的变量如何传递_作用域与上下文限制解析
jvm·数据库·python
m0_631529823 分钟前
Golang数组和切片有什么区别_Golang数组切片对比教程【通俗】
jvm·数据库·python
泓博4 分钟前
docker ubuntu源码安装openclaw的常见问题
java·linux·开发语言·ai
2401_880071404 分钟前
CSS如何利用Sass实现透明度动态化_通过函数计算CSS颜色值
jvm·数据库·python
iuvtsrt4 分钟前
如何进行SQL安全基线评估_定期核对数据库安全配置
jvm·数据库·python
Jetev5 分钟前
Python Tkinter自定义对话框怎么写_Toplevel创建子窗口并结合wait_window()实现阻塞
jvm·数据库·python
m0_591364735 分钟前
mysql如何配置缓存大小_mysql key_buffer_size基础设置
jvm·数据库·python
YuanDaima20486 分钟前
WSL2 核心中间件部署实战:MySQL、Redis 与 RocketMQ
java·数据库·人工智能·redis·python·mysql·rocketmq
li星野6 分钟前
二叉树十题通关:从层序遍历到序列化(Python + C++)
开发语言·c++·python·学习