在Python中,这两种复制列表方法为什么会有这种区别?

为何使用第一种方法时,friend_foods 会随着 my_foods 改变,而第二种方法却不会?

第二种是切片,对于list来说

不论你切多大多小,切出来的都是独立的(有单独的地址)。不会随原列表的变化而变化(这个能理解吗)

而第一种列表变量赋值,前后两个变量的list地址是一样的

 

第一种只是把列表的id指向了friend_foods,原理上,这个列表只是一个,只不过有friend_foods和my_foods两个变量用它一个列表而已,况且列表是一个可变序列

第二种是对列表进行切片,切片出的数据,又会存在在一个新建的内存空间内,所以才会导致你说的问题,

 

第一种方法,不管你指向给多少变量。都是同一个列表。第二种是两个对象,所以才会产生这种问题,

 

具体的希望你理解一下,堆栈、内存结构,以及可变和不可变序列

请记住一个内置函数id(),可以用它查看变量的内存地址。

上面的图片中打印了3个变量的内存地址,可以清楚的看到l1和l2是一个内存地址,l3和l1、l2地址不同。

建议你搞清楚一下复制、浅拷贝、深拷贝的区别。