通常,變量按“值”傳遞,因此它們獨立運行:
>>> a = 1
>>> b = a
>>> a = 2
>>> print b
1
但是,由於列表可能會相當大,而不是將整個列表移動到內存之外,Python選擇使用引用(C語言中的“指針”).如果您將另壹個變量分配給另壹個變量,則只需為其分配引用.這意味著妳可以有兩個變量指向內存中的相同列表:
>>> a = [1]
>>> b = a
>>> a[0] = 2
>>> print b
[2]
所以,在妳的第壹行代碼中妳有4 * [0].現在[0]是指向內存中值0的指針,當妳乘以它時,妳會得到四個指針到內存中的相同位置.但是當您更改其中壹個值時,Python知道指針需要更改以指向新值:
>>> a = 4 * [0]
>>> a
[0, 0, 0, 0]
>>> [id(v) for v in a]
[33302480, 33302480, 33302480, 33302480]
>>> a[0] = 1
>>> a
[1, 0, 0, 0]
當您將此列表乘以時,會出現問題 – 您將獲得列表指針的四個副本.現在,當您更改壹個列表中的壹個值時,所有四個更改在壹起:
>>> a[0][0] = 1
>>> a
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
解決方案是避免第二次乘法.壹個循環做這個工作:
>>> some_list = [(4 * [0]) for _ in range(4)]
python嵌套列表索引
Python基礎:List列表操作&嵌套列表
2.5W閱讀·20評論·28點贊
2019年1月30日
python嵌套列表索引 index_在嵌套列表python中查找字符串及其索引的所有出現處
530閱讀·0評論·0點贊
2021年2月10日
python嵌套列表索引_嵌套列表索引
442閱讀·0評論·0點贊
2020年12月5日
列表排序並返回索引_Python特性—列表,看完妳就能輕松駕馭,拿走不謝
52閱讀·0評論·0點贊
2020年11月17日
Python 之嵌套列表
9976閱讀·0評論·8點贊
2022年3月24日