查看: 1743| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

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

全局:

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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,所以不知道这两种写法的区别是什么?

上一篇:surrounded regions
下一篇:简单的位运算,但是不懂原理
🔗
yhfyhf 2015-7-19 10:56:06 | 只看该作者
全局:
本帖最后由 yhfyhf 于 2015-7-19 16:35 编辑

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

使用道具 举报

🔗
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 | 只看该作者
全局:
楼上分析得很对,前者是浅拷贝, 后者是深拷贝!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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