zoukankan      html  css  js  c++  java
  • 从一道Python面试题说起(大神勿入)

    1 list = [[]] *5
    2 print(list)
    num = 5*5
    num 
    >>> 25
    str = 'str' * 5
    str
    >>> 'strstrstrstrstr'
    1 list = [[]] * 5    
    >>>[[], [], [], [], []] 2 list[0].append(10)
    >>>[[10],
    [10], [10], [10], [10]]
    3 list[1].append(20)
    >>>[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]]
    4 list.append(30)
    >>>
    [[10, 20], [10, 20], [10, 20], [10, 20], [10, 20], 30]

      上面第1题和第4题大家都没问题,可能会有人对第2题和第3题提出疑问,明明改的是list里的第一个和第二个元素,为什么所有的子list都变了呢?其实当我们[ [ ] ] * 5的时候,本质上并没有把list复制五遍,这五个元素指向的是同一个内存地址,也就是同一个子list的内存地址。所以当我们对第一个元素append(10)的时候,所有的子list都跟着一起变。

      tips: 如果最后将 list[2] = 40, 那其他的子list会受到影响吗,请读者自行测试吧 ! 如果你测试完之后并不明白,没有关系,可以参考这一篇文章,python--关于赋值与深浅拷贝的认识

  • 相关阅读:
    NSURLSession实现文件上传
    JS中如何判断null、undefined与NaN
    jquery
    url操作等
    设计模式
    javaScript类型转换
    jQuery.noop
    JavaScript严谨模式(Strict Mode)提升开发效率和质量
    Data URI
    e.target e.currenttarget
  • 原文地址:https://www.cnblogs.com/jiaxiaoxin/p/8431429.html
Copyright © 2011-2022 走看看