我無法弄清楚這裏發生了什麼。對range
函數附加引用可以在索引3
處創建遞歸列表。範圍函數對Python列表有什麼作用?
>>> x = range(3)
[0, 1, 2]
>>> x.append(x)
[0, 1, 2, [...]]
>>> x[3][3][3][3][0] = 5
[5, 1, 2, [...]]
然而,當我試試這個:
>>> x = range(3)
[0, 1, 2]
>>> x.append(range(3))
[0, 1, 2, [0, 1, 2]]
我可以很容易地推斷對於第二種情況的原因,但不能夠了解哪些附加參考range
功能是做給追加列表。
這是爲什麼標記Python 2和3? 'range'在2和3中的行爲不同。 – interjay
列表通過python中的引用傳遞。這意味着在第一種情況下,您將指針附加到x,而不是x的值。因爲x現在包含一個指向x的指針,所以它在該點遞歸地調用它自己。 –
@JacobH:說「列表通過引用傳遞」使得它看起來像列表可能與其他對象的行爲不同。所有的對象都以相同的方式傳遞(雖然人們爭論什麼是正確的短語來描述) – DSM