列表包含自身,可行嗎?

今天一起探索一個列表賦值的問題,比較有意思。

列表包含自身

先看一個列表的賦值操作:

In [1]: a=[1,3,5]

In [2]: a[1]=a  # 列表內元素指向自身

這樣相當於創建了一個引用自身的結構。

打印結果顯示是這樣的:

In [3]: a
Out[3]: [1, [...], 5]

中間省略號表示無限循環,這種賦值操作導致無限循環,這是爲什麼?下面分析下原因。

執行 a = [1,3,5] 的時候,Python 做的事情是首先創建一個列表對象 [1, 3, 5],然後給它貼上名爲a的標籤。

執行 a[1] = a 的時候,Python 做的事情則是把列表對象的第二個元素指向a所引用的列表對象本身。

執行完畢後,a標籤還是指向原來的那個對象,只不過那個對象的結構發生了變化。

從之前的列表 [1,3,5] 變成了 [1,[...], 5],而這個[...]則是指向原來對象本身的一個引用。

如下圖所示:

可以看到形成一個環路:a[1]--->中間元素--->a[1],所以導致無限循環。

以上就是列表賦值指向自身引發的無限循環問題,大家在平時使用中可注意下。原創不易,歡迎大家三連支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章