python 初始化list大小_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值