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

发布时间:2019-06-10 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Python中操作符“*”创建数组与循环创建数组的区别脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

0x00 起因

注: 以下操作使用的Python版本为:Python 3.7.3
今天在写基数排序的时候,由于需要创建一个0-9的bucket的list,所以我使用了如下方法创建:

bucket = [[]] * 10

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

bucket[3].apPEnd(3)

结果显示:

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

结果不符合我的预期,于是用id查看对象的引用后:

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


发现该list里面的list果然都是同一个!

0x01 解决办法

随后改用如下方法创建,并存放数据:

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

得到的结果就符合预期了,可以看到对象的引用不一样

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

0x02 小结

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

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


使用"*"操作符是反馈 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

脚本宝典总结

以上是脚本宝典为你收集整理的Python中操作符“*”创建数组与循环创建数组的区别全部内容,希望文章能够帮你解决Python中操作符“*”创建数组与循环创建数组的区别所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。