2017-11-13 Python list初始化坑一个;C函数覆盖

今天debug的时候发现了Python 二维list初始化的一个坑。

一开始我是这样初始化二维数组的:

matrix = [[0 for _ in xrange(MAX_COL)] for _ in xrange(MAX_ROW)]

后来发现这样好傻,于是改成下面这样:

matrix = [[0] * MAX_COL] * MAX_ROW

毕竟这样看起来优雅。哪知道这里面有个巨大的坑:第二维的list是浅拷贝而不是深拷贝,导致一改就是一列!所有的matrix[i]都指向同一个list对象。当你改写matrix[0][0]的值的时候,matrix[1][0]的值也被改了!

Python文档链接:

https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

Python的这个设定是有点问题的。虽然矩阵运算这种东西应该避免在Python中做,但作为一种变成语言,这种语法便利性还是要提供的。不然要用循环推导去初始化二维数组也太蛋疼了。


C函数覆盖的问题直接看知乎吧:

https://www.zhihu.com/question/68006017/answer/258835150

看来大牛也有混淆系统调用和libc的时候呀: P

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,227评论 1 118
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,688评论 0 89
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 7,410评论 1 13
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 4,980评论 0 5