栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[[0]*9 for

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[[0]*9 for

[[0]*9 for _ in range(9)] 与[[0]*9]*9的区别

可能很多小伙伴在写算法题的时候,,比如在写动态规划的时候,
大家默认创建多维数组的方式都是

dp = [[0]*9 for _ in range(9)]

大家这样做了很多次了,那肯定是没有毛病的
但大家有没有思考过一个问题,就是

dp = [[0]*9]*9

这样写是不是更方便一些,因为我以前没有尝试过,今天踩了个大坑,就记录一下

以第一种方式创建,复制看看会发生什么
dp = [[0]*9 for _ in range(9)]
dp[0][0] = 1
dp
"""
[[1, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0]]
 """

看,我们的输出是没有问题的,的确只给dp[0][0]给赋值了

我们试试第二种创建的,进行复制,看看会发生什么
dp = [[0]*9]*9
dp[0][0] = 1
dp
"""
[[1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0]]


"""

我们神奇的发现,虽然我们只给dp[0][0]赋值了,但结果是第一列都被赋值了
这里就需要解释下了
大家学过python的都知道,python的变量名与值是通过索引链接起来的
当我们用*给列表增加的时候,python内部并由进行真正的创建新的列表
而是仅仅复制了索引,所以到会导致出现这种情况,所以,大家在创建多为数组的时候就不要偷懒了,老老实实去创建

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号