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

相關文章
相關標籤/搜索