Python中操作符“*”创建数组与循环创建数组的区别
0x00 起因
注: 以下操作使用的Python版本为:Python 3.7.3
今天在写基数排序的时候,由于需要创建一个0-9的bucket的list,所以我使用了如下方法创建:
bucket = [[]] * 10
随后,我在往桶里面存放数据的时候:
bucket[3].append(3)
结果显示:
结果不符合我的预期,于是用id查看对象的引用后:
发现该list里面的list果然都是同一个!
0x01 解决办法
随后改用如下方法创建,并存放数据:
bucket = [ [] for x in range(10)] bucket[3].append(3)
得到的结果就符合预期了,可以看到对象的引用不一样
0x02 小结
查看官方文档,原来对于mul操作符有说明,如下图所示
使用"*"操作符是反馈 b个数的a,在同一个list中的所以list的引用都是一样了
而使用[ [] for x in range(10) ]
则相当于使用循环:
bucket = [] for x in range(10): bucket.append([])
自然bucket中的每个list都是不同的对象
得出的结论:我们在批量创建引用对象时,不要使用Multi operator!!!
0x03 References
相关推荐
elizabethxxy 2020-11-06
huavhuahua 2020-11-05
xiaoseyihe 2020-11-16
diyanpython 2020-11-12
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16