一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 525|回复: 4
收起左侧

[学Python/Perl] 求问一个Python基础问题

[复制链接] |试试Instant~ |关注本帖
pyx115 发表于 2015-7-19 10:37:55 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
  1. matrix1 = [[0]*(n+1)]*(m+1)
  2. matrix2 = [[0 for col in range(n+1)] for row in range(m+1)]
复制代码
求问这两种写法有什么区别?因为做一道题的时候,我开始用的第一种写法,无法通过测试,改成第二种写法就通过了。但是我试:matrix1 == matrix2 结果是True,所以不知道这两种写法的区别是什么?
yhfyhf 发表于 2015-7-19 10:56:06 | 显示全部楼层
本帖最后由 yhfyhf 于 2015-7-19 16:35 编辑

这里有个经典的坑:matrix1里的各行都是第一行的浅拷贝,改变任意一行都会同时改变其他行。matrix2则是深拷贝,foreach loop每次生成一个新的对象。所以,如果只是要生成一个一维数组,两种方法都可以;如果是多维数组,用第二种方法。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

yhfyhf 发表于 2015-7-19 10:57:42 | 显示全部楼层
你可以在shell下试一下:
  1. In [1]: m, n = 3, 4

  2. In [2]: mat  = [[0] * n] * m

  3. In [3]: mat
  4. Out[3]: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

  5. In [4]: mat[1][1] = 1

  6. In [5]: mat
  7. Out[5]: [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
复制代码
回复 支持 反对

使用道具 举报

 楼主| pyx115 发表于 2015-7-19 11:52:44 | 显示全部楼层
yhfyhf 发表于 2015-7-19 10:57
你可以在shell下试一下:

Thanks!

想起来了,这东西是很久以前看过的,就是没想到在这里会有这么大影响。
回复 支持 反对

使用道具 举报

kehe 发表于 2015-7-19 16:29:42 | 显示全部楼层
楼上分析得很对,前者是浅拷贝, 后者是深拷贝!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-10 21:24

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表