i = 0
与完全不同i[0] = 0
。
伊格纳西奥(Ignacio)简洁正确地解释了原因。因此,我将尝试用一个更简单的词来解释这里实际发生的情况。
在第一种情况下,i
只是一个标签指向某个对象(列表中的成员之一)。 i = 0
更改对其他对象的引用,以便i
现在引用integer0
。该列表未修改,因为您从未要求修改l[0]
或的任何元素l
,而您只修改了i
。
在第二种情况下,i
它也只是指向列表中成员之一的名称。那部分没有什么不同。但是,i[0]
现在正在调用.__getitem__(0)
列表成员之一。同样,i[0] = 'other'
会喜欢这样做i.__setitem__(0, 'other')
。它并不是i
像常规赋值语句那样简单地指向其他对象,实际上是在改变对象i
。