列表值被覆写与被修改分不清楚

图片说明


为什么eggs的列表值并没有发生改变,覆写又是什么意思?

eggs=[4,5,6] #这是对eggs的重新赋值,赋值后又是一个新变量了,内存地址已经变了
eggs[:]=[4,5,6] # 这是修改eggs的元素值,eggs的内存地址不变

作者的本意大概是源列表的值个数没变,而是整体替换进行的修改,表述的不太清楚

因为eggs重新赋值了,它的内存地址不是之前那个list了

意思是原来的list内容没变,放了一个新的list上去,原来的list就整个被覆盖了,而不是把里面的值替换一遍。

这里并不是覆盖,[1,2,3]和[4,5,6]是两个不同的列表,并不是后面的把前面的覆盖了。eggs=[1,2,3],会在内存中存下列表[123],eggs变量也会以一种特定的方式存到内容里,而赋值语句做的就是让egg指向列表,当执行egg=[4,5,6]时,会新创建一个新的列表,然后让egg指向它(从指向123,到指向456)。原
来那个列表不再被引用,会在稍后的某个时间被Python具体实现里的垃圾回收机制删除掉。
而如果你用egg[1]=123,就会把ess所指列表的第二个元素修改掉。