基本上可以这样理解。
list1.sort() 是对 list1 进行“就地排序”,也就是说 list1 所指内存空间原来含有 5,4,3,2,1 排序后变为 1,2,3,4,5 。
list3 = list1 是将 list1 的引用传给 list3,也就是说现在 list1 和 list3 指向的是同一块内存。
切片返回对象的 浅拷贝 ,list2 = list1[:] 相当于 list2 = list1.copy() 。
通过
id(list1)
id(list2)
id(list3)
可以看出,list1 和 list3 的内存地址相同,与 list2 不相同。
浅拷贝:只拷贝引用
如下:l1, l2 都含有 a,a 发生变化,l1, l2 都会发生相应变化
>>> a = [1,3,7]
>>> l1 = [a,4,6]
>>> l2 = l1[:]
>>> l1
[[1, 3, 7], 4, 6]
>>> l2
[[1, 3, 7], 4, 6]
>>> del l1[2]
>>> l1
[[1, 3, 7], 4]
>>> l2
[[1, 3, 7], 4, 6]
>>> del a[0]
>>> a
[3, 7]
>>> l1
[[3, 7], 4]
>>> l2
[[3, 7], 4, 6]
>>> del l1[0][0]
>>> a
[7]
>>> l1
[[7], 4]
>>> l2
[[7], 4, 6]