关于深浅拷贝的问题,有很多理解不明白。其实深浅拷贝的都是拷贝对象,两者对拷贝的对象是有所不同的。
深拷贝:对父对象的地址的拷贝,生产新拷贝了一份与原对象不同的地址的对象,修改父对象中的任何值,都不会改变深拷贝后新对象的值。
浅拷贝:对父对象的值的拷贝,内存共用,父对象的值发生变化,对父对象拷贝后对象的值都会随着被改变。
浅拷贝:只复制对象的基本类型,对象类型,仍属于原来的引用
深拷贝:不仅复制对象的基本类,同时也复制原对象的对象,完全是新对象产生的
可变对象:一个对象在不改变其所指向的地址前提下,可以修改其所执行的地址中的值
不可变对象:一个对象所指向的地址上的值是不能修改的,如果修改了就是它执行的地址就改变了,相当于将这个对象指向的值复制出来一份,然后做了修改后存到另一个地址上了。
区别:可变对象就不会这样会修改值后另存到一个新的地址上,而是直接再原对象的地址上把值给改变了,这个对象依然执行这个地址
本质区别:可变对象修改了值,不会新建一个内存地址的对象,不可变对象如果修改了值,及时复制了一份新的内存地址,原始地址的值不会被改变。
不可变元素包含:int,float,complex,long,str
可变原生:list