今天一起探索一個列表賦值的問題,比較有意思。
列表包含自身
先看一個列表的賦值操作:
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],所以導致無限循環。
以上就是列表賦值指向自身引發的無限循環問題,大家在平時使用中可注意下。原創不易,歡迎大家三連支持。