一,深浅拷贝
看拷贝列子day19-1.py
s=[1,‘zhangsan‘,‘lisi‘] #s2是s的拷贝 s2=s.copy() #打印s2和s是一样的 print(s2) #修改s2 s2[0]=2 #打印s是未变的 print(s) #打印s2因为修改了所以有变化 print(s2) [1, ‘zhangsan‘, ‘lisi‘] [1, ‘zhangsan‘, ‘lisi‘] [2, ‘zhangsan‘, ‘lisi‘]
假如修改的元素是一个列表,源列表也会发生变化day19-2.py
s = [[1,2],‘zhangsan‘,‘lisi‘] s3=s.copy() print(s3) print(s) s3[0][1]=3 #修改s3里面列表元素以后源列表也对应改变了 print(s3) print(s) [[1, 2], ‘zhangsan‘, ‘lisi‘] [[1, 2], ‘zhangsan‘, ‘lisi‘] [[1, 3], ‘zhangsan‘, ‘lisi‘] [[1, 3], ‘zhangsan‘, ‘lisi‘]
为什么会这样,因为第一次修改的是一个不可变元素对应的指针发生了变化,第二次s和s3指向的内存地址是一个可变的元素(列表)当列表发生改变,但是列表的内存地址没有改变s和s3的指向没有发生改变,所以修改s3的第一个元素列表对应的s的第一个元素列表也发生了改变。
这就是浅拷贝,浅拷贝只拷贝第一层