最近学习python,开始看《python核心编程》这本书,在第6章提到浅拷贝这个概念,书上说到“浅拷贝就是只拷贝了对对象的索引,而不是重新建立了一个对象。”对于这个概念我在网上搜了下最后有了点理解:
当用切片对list_one进行浅拷贝有了list_two,查询他们中元素的地址发现每个元素的地址都是一样的,也就证实了“浅拷贝就是只拷贝了对对象的索引,而不是重新建立了一个对象”这句话。
这时改变list_three中的某个元素发现,list_four也变了,但是通过查询ID可以发现,元素的ID始终没有变化,也就是说没有生成新的对象只是原地改变。这是因为我们改变的是list_three序列中的序列元素,序列属于可改变值的对象。当我们试着改变list_three中的整数元素后会发现list_four不会被影响,查询ID会发现元素的ID变化了,这是因为在python中整数是不可改变值的对象,所以想要去改变它时才会生成新的对象,因为生成新的对象ID值不同,也就不会对另外的序列有影响。
而在深拷贝中拷贝的是对象本身不是引用,是独立的个体不会相互影响所以不会有像浅拷贝中的现象。