从一道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--关于赋值与深浅拷贝的认识

posted @ 2018-02-08 14:39  辣眼睛De小新  阅读(199)  评论(0编辑  收藏  举报