Python中操做符“*”建立数组与循环建立数组的区别

0x00 原由

注: 如下操做使用的Python版本为:Python 3.7.3
今天在写基数排序的时候,因为须要建立一个0-9的bucket的list,因此我使用了以下方法建立:html

bucket = [[]] * 10

随后,我在往桶里面存放数据的时候:python

bucket[3].append(3)

结果显示:
图片描述app

结果不符合个人预期,因而用id查看对象的引用后:spa

clipboard.png
发现该list里面的list果真都是同一个!code

0x01 解决办法

随后改用以下方法建立,并存放数据:htm

bucket = [ [] for x in range(10)]
bucket[3].append(3)

获得的结果就符合预期了,能够看到对象的引用不同对象

clipboard.png

0x02 小结

查看官方文档,原来对于mul操做符有说明,以下图所示blog

clipboard.png
使用"*"操做符是反馈 b个数的a,在同一个list中的因此list的引用都是同样了
而使用[ [] for x in range(10) ]则至关于使用循环:排序

bucket = []
for x in range(10):
    bucket.append([])

天然bucket中的每一个list都是不一样的对象
得出的结论:咱们在批量建立引用对象时,不要使用Multi operator!!!图片

0x03 References

Python multi operator

相关文章
相关标签/搜索