首先是这样的:
old = [1, 2, 3, 4, 5]
new = old
old = [6]
print(new)
这个的输出是:【1,2,3,4,5】
这个很正常能理解。因为new成为了新的列表【1,2,3,4,5】.后面old的改变与new无关
可是.我如果这么去写代码的:
list1 = [1, 3, 2, 9, 7, 8]
list2 = list1[:]
list2
[1, 3, 2, 9, 7, 8]
list3 = list1
list3
[1, 3, 2, 9, 7, 8]
在这两种赋值之后,我再对list1进行sort,为什么list3会被影响?
list1.sort()
list1
[1, 2, 3, 7, 8, 9]
list2
[1, 3, 2, 9, 7, 8]
list3
[1, 2, 3, 7, 8, 9]
求解
list3本质上就是list1, 这是引用, 不是值, list3和list1指向同一个内存地址, 当然是同一个list对象.
而list2你是用切片创建的, 这个是拷贝, list2和list1指向不同的内存地址, 不是同一个对象
python把数据类型分为了可变和不可变两大类, 对于可变类型, 比如整型, a = 1, 复制一个b=a, 你在改变a = 3, 这时候b还是1
但对于不可变类型, 比如list, 改变a, 那么b也会一起跟着变
其实是把list1赋给了list3,所以list1改变,list3也会改变。