美文网首页
2017-11-13 Python list初始化坑一个;C函数

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

作者: Michaelbest1 | 来源:发表于2017-11-13 21:05 被阅读46次

    今天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

    相关文章

      网友评论

          本文标题:2017-11-13 Python list初始化坑一个;C函数

          本文链接:https://www.haomeiwen.com/subject/gyrtvxtx.html